class Foo < ActiveRecord::Base
has_many :bar
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
我想订购我的:foos ...基于它的最后一个:bar
所以,让我们说:
Foo.first.bars => [{key: 'a', value: 1}, {key: 'b', value: 2}, {key: 'c', value: 3}]
所以... Foo.first.bars.last.value => 3
我有一堆:foos,每个都有一堆:吧,但我只关心最后一个:吧。
我可以根据最后一个:value
对我的:foos进行排序吗? Bar需要范围吗?
例如......
Foo.includes(:bars).order('bars.last.value')
答案 0 :(得分:1)
class Foo < ActiveRecord::Base
has_many :bar
scope :latest_foo_value, ->(ord) { includes(:foos).order("foos.value #{ord.upcase}") }
end
class Bar < ActiveRecord::Base
belongs_to :foo
default_scope order: 'created_at DESC'
end
谢谢,@丹!如果你想复制并粘贴到你自己的答案中,我很乐意给你信任。你知道是否有办法在Bar上调用命名范围?类似的东西:
class Foo < ActiveRecord::Base
has_many :bar
scope :latest_foo_value, ->(ord) { includes(:foos).order("foos.current.value #{ord.upcase}") }
end
class Bar < ActiveRecord::Base
belongs_to :foo
scope :current, -> { order('created_at DESC') }
end
那不起作用...... Mysql2::Error: Unknown column 'foos.current.value' in 'order clause'
。
干杯!