我有以下架构:
foo:
id: integer
bar:
id: integer
condition: boolean
foo_bar:
id: integer
foo_id: integer
bar_id: integer
模型和架构都是这样的。给定foo的一个实例,我想得到一个foo_bar的实例,其中相应的bar.condition为true。
是否有一种对RoR友好的方法呢?
答案 0 :(得分:1)
首先,您需要设置一些ActiveRecord关联:
class Foo < ActiveRecord::Base
has_many :foo_bars
end
class Bar < ActiveRecord::Base
has_many :foo_bars
end
class FooBar < ActiveRecord::Base
belongs_to :foo
belongs_to :bar
end
然后您可以查询这些关联。给定一个Foo实例,找到FooBar的第一个实例,其中bar.name ==&#39; my-bar&#39;:
foo = Foo.find(1)
foo.foo_bars.include(:bar).where(bar: {name: 'my-bar'}).first
答案 1 :(得分:0)
您可能希望考虑ActiveRecord Association Extensions:
#app/models/foo.rb
class Foo < ActiveRecord::Base
has_many :foo_bar
has_many :bar, through: :foo_bar do
def true
where condition: true
end
end
end
#app/models/foo_bar.rb
class FooBar < ActiveRecord::Base
belongs_to :foo
belongs_to :bar
end
#app/models/bar.rb
class Bar < ActiveRecord::Base
has_many :foo_bar
has_many :foo, through: :foo_bar
end
这将使您能够调用以下内容:
@foo = Foo.find x
@foo.bar.true
虽然这不会自己调用foo_bar
条记录,但如果您正确使用它,应能够加载您需要的数据