2011-07-28 53 views
1

我可以说5个模型。如何通过多个模型循环

Thread 
Poll 
Message 
Wall 
Zone 

我想的东西,我可以通过将包含字符串或数组中的每个模型回路,如果该模式有一个USER_ID领域,它更新到任何我想将其设置为。

你如何能做到像

[Thread.where(:user_id => XXX)].each do |model| 
... 
end 

当线程是通过模型列表循环任何想法[“主题”,“民意调查”,...]

感谢

回答

4

试试这个:

models = ["Thread", "Poll", ....] 

models.each do |model| 
    model = model.constantize 
    if model.columns.map(&:name).include?("user_id") 
    model.where(:user_id => my_user_id).each do |m| 
     do_stuff_with(m) 
    end 
    end 
end 
+0

这并不检查'user_id'是否存在(asker预期的),这可能导致崩溃.. – apneadiving

+0

yap。抱歉。我读了一半的问题,并开始输入.. –

2

这里是一个可能的解决方案:

user_id = 1 
[Thread, Poll, Message, Wall].each do |kind| 
    if kind.columns.find {|column| column.name == 'user_id'} 
    kind.update_all(:user_id => user_id) 
    end 
end 

但是这会更新整个数据库。你确定你要这么做吗?

2
[Thread, Poll, ...].each do |klass| 
    if klass.columns.map(&:name).include? "user_id" 
    klass.where(:user_id => user_id).all.each do |instance| 
     #do what you need here 
    end 
    end 
end