Foo
has_many Bar
。我想做点什么:
foo_instance.bars.find_with_custom_stuff(baz)
如何定义find_with_custom_stuff
,使其在bars
关系中可用? (而不仅仅是Bar
类方法?)
更新
我想做一些比范围更复杂的事情。类似的东西:
def find_with_custom_stuff(thing)
if relation.find_by_pineapple(thing)
relation.find_by_pineapple(thing).monkey
else
:banana
end
end
答案 0 :(得分:5)
范围,导轨3中的scope
和导轨2中的named_scope
。
class Bar
scope :custom_find, lambda {|baz| where(:whatever => baz) }
end
foo_instance.bars.custom_find(baz)
scope
应该返回一个范围,因此在您提供更新时,您可能不希望在此处使用scope
。您可以编写类方法,并使用scoped
访问当前范围,例如:
class Bar
def self.custom_find(thing)
if bar = scoped.find_by_pineapple(thing)
bar.monkey
else
:banana
end
end
end