Как определить именованные рамки с порядком по ассоциациям
У меня есть две модели.
class Shoe < ActiveRecord::Base
has_many :sizes, :dependent => :destroy
scope :brand_asc , order('brand ASC')
scope :brand_desc , order('brand DESC')
attr_accessible :brand ,:model
end
class Size < ActiveRecord::Base
belongs_to :shoe
scope :size_brand_asc , order("#{self.shoe.brand} ASC")
scope :size_brand_desc , order("#{self.shoe.brand} DESC")
end
It is very easy to call named scope on Shoe model like below.
@shoes = Shoe.brand_asc
But i want to sort sizes on the base of "brand" that is attribute of shoe model.so this
не работает для меня, как показано ниже.
@sizes = Size.size_brand_asc # giving error
Как я могу сортировать размеры по марке обуви
2 ответа
Решение
Вы можете достичь этого, выполнив следующие действия:
class Size < ActiveRecord::Base
belongs_to :shoe
scope :brand_ordered, lambda do |way = 'ASC'|
includes(:shoe).order("shoes.brand #{way}")
end
Использование:
@sizes = Size.brand_ordered('DESC')
# or
@sizes = Size.brand_ordered('ASC')
# equivalent:
@sizes = Size.brand_ordered
В классе обуви:
class Shoe < ActiveRecord::Base
scope :brand_ordered, lambda do |way = 'ASC'|
order("#{self.table_name}.brand #{way}")
end
Ответ в одну строку
scope :size_brand_asc, ->{joins(:shoe) & Shoe.brand_asc}