我来自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
感觉有点臃肿。如果没有找到结果,我添加了“if lead_singer”部分,但如果有更好的方法可以解决这个问题,我很乐意受到启发。
修改 我正在使用MongoDB和Mongoid,所以加入对我来说不是一个选择。
答案 0 :(得分:4)
回答ActiveRecord(在更新问题之前,我希望仍然有用):make association:a band has_one:lead_signer,A LeadSinger belongs_to:band。现在:
LeadSinger.joins(:band).where(:"bands.type" => 'Rock & Roll').
update_all(:rock_and_roll => true)
答案 1 :(得分:3)
使用MongoId,您仍然可以使用标准进行更新:
LeadSigner.where(:band_id.in => band_ids).update(:rock_and_role => true)