Basic Rails 3 вопроса: как сортировать товары? - PullRequest
2 голосов
/ 11 декабря 2010

У меня есть следующие модели:

Product: name, shop_id (foreign key), brand_id (foreign key), price
Shop:    name
Brand:   name

Ассоциации:

Product: belongs_to :shop
         belongs_to :brand
Shop:    has_many   :products
         has_many   :brands,   :through => :products
Brand:   has_many   :products
         has_many   :shops,    :through => :products

В ProductsController#list Я хотел бы получить список всех продуктов, отсортированных по названию магазина изатем по названию бренда.

Я пытался сделать:

@products = Product.order("products.shop.name ASC, products.brand.name ASC")

Но это не работает (я думаю, потому что products.shop.name не существует на уровне базы данных).

Как правильно это сделать?

Ответы [ 2 ]

16 голосов
/ 11 декабря 2010

Остин Л прав, но его синтаксис немного стар.Новый синтаксис ActiveRecord намного чище:

@products = Product.includes(:shop, :brand).order("shops.name ASC, brands.name ASC")
4 голосов
/ 11 декабря 2010

См. Эту статью: http://www.definenull.com/node/8

В вашем примере:

@products = Product.find(:all,:include => [:shop, :brand], :order => 'shops.name ASC, brands.name ASC')

Я сам не проверял этот код, поэтому не могу ручаться за него 100%, но датьпопыткаЕсли это не сработает, попробуйте удалить «ASC» и посмотреть, работает ли он.

...