Rails 3是否有find_by关联魔法?

时间:2011-01-26 04:55:44

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

具体来说,我们假设我们有两个合理的模型:

  1. TieDyeCentipedehas_many :legs
  2. Leg,具有:color属性。
  3. 作为TieDyeCentipede,没有两条腿是相同的颜色。事实上,特定腿部的颜色在我们所有TieDyeCentipedes的腿部的全部中是唯一的。

    根据这种独特性,我们希望通过特定颜色的腿找到特定的Centipede - 让我们说:deep_sky_blue

    我可以这样做:

    critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede

    但是,我可以使用find_by_*类上的TieDyeCentipede方法吗?

2 个答案:

答案 0 :(得分:6)

没有魔法:

TieDyeCentipede.joins(:legs).where(:legs => {:color => 'deep_sky_blue'}).first

一些魔法:

def self.find_by_leg_color(color)
  TieDyeCentipede.joins(:legs).where(:legs => {:color => color}).first
end

答案 1 :(得分:3)

尝试TieDyeCentipide.joins(:legs).where(:legs => {:color => :deep_sky_blue}).first

对于find_by_*方法或类似方法,我建议使用Pacecar,这会为您的AR模型生成许多有用的范围。