0

我仍在尝试学习 SQL,我可以使用一些按不同属性排序的帮助。我正在尝试做的是得到所有productsskus首先按 . 订购它们collection.name,然后按sku.name. 但是,集合名称和 sku 名称都位于通过外键与 products 表关联的不同表中。

所以它看起来像这样

product.id | collection.name | product.name | sku.name
1          | Apple           | Lateral File | A34
3          | Beaumont        | Desk         | BT450
2          | Beaumont        | Hutch        | BT451
5          | Beaumont        | Drawer       | BT452
7          | Vista           | File         | V246
6          | Waterfall       | TV Stand     | WF899

任何帮助表示赞赏

这是我的模型:

产品.rb

class Product < ActiveRecord::Base
  attr_accessible               :name, 
                                :title,
                                :features,
                                :collection_id,
                                :skus_attributes


  belongs_to                    :collection

  has_many                      :skus, dependent: :destroy
  accepts_nested_attributes_for :skus, reject_if: lambda { |a| a[:title].blank? }, allow_destroy: true
end

集合.rb

class Collection < ActiveRecord::Base
  attr_accessible   :name, 
                    :title,
                    :description

  has_many :products
end

sku.rb

class Sku < ActiveRecord::Base
  default_scope order('skus.id ASC')

  attr_accessible               :name,
                                :title,
                                :product_id

  belongs_to                    :product

end
4

2 回答 2

0

你不会在 Rails 中得到准确的结果,因为这不是 Rails 的用途。但是,如果您想按集合名称和 sku 名称订购所有产品,那就是这样

Product.joins(:collection, :skus).order('collections.name, skis.name')

但由于在您的模型中 Product 可以有很多 SKU,我不完全确定该查询的结果。

于 2013-09-03T22:36:10.920 回答
0

要获得与您在上面发布的结果类似的结果,您可以尝试以下操作:

Product.joins(:collection, :skus)
       .select('products.id, collections.name, products.name, skus.name')
       .order('collections.name ASC, skus.name ASC')
于 2013-09-03T22:53:09.153 回答