如何循环使用多个模型

时间:2011-07-28 20:28:30

标签: ruby-on-rails ruby-on-rails-3 activerecord

我可以说5个型号。

Thread
Poll
Message
Wall
Zone

我想在某些地方循环浏览字符串或数组中包含的每个模型,如果该模型有user_id字段,请将其更新为我想要设置的内容。

关于如何做某事的任何想法

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

Thread在模型列表中循环[“Thread”,“Poll”,....]

由于

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 :(得分: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