我试图弄清楚是否可以按记录分组/过滤/选择'属性虽然是连接表。虽然我理解还有其他方法可以实现相同的结果(我在下面使用其中一种),但我想知道是否可以通过HMT关系实现相同的效果。
模型如下:
class Foo < ActiveRecord::Base
has_many :foo_bars
has_many :bars, through: foo_bars
# SOMETHING LIKE THIS:
has_many :group_a_bars, -> where { foo_bars.bar.bar_group_id: 1 }
end
class Bar < ActiveRecord::Base
# == Schema Information
#
# Table name: bars
# bar_group_id :integer not null
belongs_to :bar_group
end
class FooBar < ActiveRecord::Base
belongs_to :foo
belongs_to :bar
end
class BarGroup < ActiveRecord::Base
has_many :bars
end
我希望在视图中能够执行的操作类似于:#{foo.group_a_bars}
所有FooBars
bars
属于第一个bar_group
foo.foo_bars.find_all{ |foo_bar| foo_bar.bar.bar_group_id == 1 }
}
同样可以通过以下方式实现:
class Foo < ActiveRecord::Base
has_many :foo_bars
has_many :bars, through: foo_bars
# WORKING:
has_many :group_a_bars,
-> { joins(:bar).where(bars: { bar_group_id: 1 }) },
class_name: "FooBar",
source: :bar
end
编辑:根据@smathy的建议,我添加了一个加入,并使用以下内容:
{{1}}
答案 0 :(得分:1)
是的,它会是这样的:
has_many :group_a_bars,
-> { joins(:bar).where( bar: { bar_group_id: 1 } ) }, through: :foo_bars, class_name: "Bar"
您可能还需要:source
选项。