具体来说,我们假设我们有两个合理的模型:
TieDyeCentipede
,has_many :legs
Leg
,具有:color
属性。作为TieDyeCentipede
,没有两条腿是相同的颜色。事实上,特定腿部的颜色在我们所有TieDyeCentipedes
的腿部的全部中是唯一的。
根据这种独特性,我们希望通过特定颜色的腿找到特定的Centipede
- 让我们说:deep_sky_blue
。
我可以这样做:
critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede
但是,我可以使用find_by_*
类上的TieDyeCentipede
方法吗?
答案 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模型生成许多有用的范围。