0

私はPHPの世界から来ており、Rubyはかなり新しいので、これを行うためのより良い方法があるかもしれません。このブロックは、より良いコードでより簡潔に表現できますか?

bands = Band.where(:type => 'Rock & Roll').only(:id)
band_ids = bands.map &:id

band_ids.each do |id|
  lead_singer = LeadSinger.find(:band_id => id)
  if lead_singer
    lead_singer.rock_and_roll = true
    lead_singer.save
  end
end

それはすべて少し肥大化したように感じます。結果が見つからなかった場合に備えて追加した「iflead_singer」の部分ですが、これを回避するためのより良い方法があれば、啓蒙されたいと思います。

編集 私はMongoidでMongoDBを使用しているので、結合は私にとってオプションではありません。

4

2 に答える 2

4

ActiveRecordへの回答(質問の更新前、まだ役立つことを願っています):関連付けを行います:バンドhas_one:lead_signer、LeadSingerbelongs_to:band。そして今:

LeadSinger.joins(:band).where(:"bands.type" => 'Rock & Roll').
  update_all(:rock_and_roll => true)
于 2012-07-11T20:13:01.580 に答える
3

MongoIdを使用すると、基準で更新できるはずです。

LeadSigner.where(:band_id.in => band_ids).update(:rock_and_role => true)
于 2012-07-11T20:17:55.867 に答える