假设我在rails4 app中有以下内容:
class Foo < AR::Base
has_many :foo_bar
has_many :bar, through: :foo_bar
end
foo_bar表有一个带有数字的“sort”列。为了使事情更有趣,“酒吧”表还有一个带有数字的“排序”列。与连接表排序列的名称相同。而且,这很重要......
class Bar < AR::Base
default_scope -> { order(:sort) }
end
我需要在关联上有一个默认范围,例如:
foo = Foo.last
foo.bars # => List of bars, ordered by the number on the foo_bar table
我该怎么做?这意味着取消了该栏,但只是排序
答案 0 :(得分:2)
您可以使用order
选项
class Foo < AR::Base
has_many :foo_bar
has_many :bar, -> { order('foo_bar.sort') }, through: :foo_bar
end
答案 1 :(得分:0)
你可以这样做:
foo.bars.sort(foo_bar.position)
sort
将按给定属性对列表进行排序,因此请在foo_bar上为其指定要排序的属性。
答案 2 :(得分:0)
我这样做是为了工作:
class Foo < AR::Base
has_many :foo_bar
has_many :bar, through: :foo_bar
def sorted_bars
foo_bar.map(&:bar)
end
end
由于默认范围,这对我来说太复杂了。我仍然会接受一个提供更优雅解决方案的答案:)