产品具有许多产品属性:
class Product < ApplicationRecord
has_many :product_attributes
end
class ProductAttribute < ApplicationRecord
belongs_to :product
end
我可以用sort_by
对它进行排序:
@products.includes(:product_attributes).to_a.sort_by do |product|
product.product_attributes.find_by(title: "Volume").value.to_i
end
是否可以使用order
方法进行相同的排序?
我不明白如何按特定属性标题排序(如“卷”等)。
@products = Product.includes(:product_attributes).order( ??? )
下面是类似的问题:
Rails - Sort by join table data
也许我没有看到明显的东西,但我认为它没有回答我的问题。我不是通过属性名称,而是通过属性值来选择项,比如“Volume”。换句话说,我通过标题为“Volume”的属性值来选择find_by
(请看上面的代码)。我不明白如何使用order
进行这样的选择。
2条答案
按热度按时间h9vpoimq1#
请尝试以下内容
按两个级别深的关联排序的引用。
Rails order by association field
Rails参考,查询具有条件的关联记录
Rails, querying associated records with conditions
您还可以使用带参数的范围,如下所示
n1bvdmb62#
有几种不同的可能解决方案-其中之一是使用ON子句中的附加限制执行自定义联接:
第一个
其他可能的解决方案是使用子查询或横向连接从product_attributes表中选择正好与volume属性相对应的行。