2011-07-28 10 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」が存在するかどうかをチェックしません(質問者が期待したとおり)。 – 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 
関連する問題