Rails:动态排序关联记录



试图从父模型中寻找一种对关联记录进行排序的方法,但只能通过在模型文件本身中硬编码排序来找到静态方法。像这个例子:Rails对相关记录进行排序

但我想使用这样的表对"动态"进行排序RailsCasthttp://railscasts.com/episodes/340-datatables.

如果我的父模型上显然有信息,那么表的工作和排序都很好,但我不希望我的模型的DB表太宽,所以我想从关联的模型中提取示例:

Product.order("#{sort_column_p} #{sort_direction}").page(page).per_page(per_page)
def sort_column_p
columns = %w[sku orders.qty]
columns[params[:iSortCol_0].to_i]
end
def sort_direction
params[:sSortDir_0] == "desc" ? "desc" : "asc"
end

当我尝试以这种方式排序时,我会得到以下错误:

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'orders.qty' in
'order clause': SELECT  `products`.* FROM `products`  WHERE `products`.`user_id` = 
1 ORDER BY orders.qty asc LIMIT 20 OFFSET 0)


相关型号为:
父级:产品
子级:订单
谢谢你们的帮助,伙计们

编辑:顺便说一句,是的,模型具有适当的has_many&belongs_to正确模型中的参数,子模型中的外键与父模型正确对齐。






编辑2:因此,经过一系列调试后,它在SQL中的外观如下:

SELECT Products.sku, Orders.qty
FROM Products
LEFT JOIN Orders
ON Products.id=Orders.product_id


所以现在只是将其转换为Rails格式的问题!:)

考虑到您需要LEFT JOIN而不是INNER JOIN,您需要自己指定大部分SQL,甚至使用Rails,也就是说:

Product.joins('left join orders on products.id=orders.product_id').select('products.sku, orders.qty')

如果你可以通过INNER JOIN,那么这将简化为:

Product.joins(:tables).select('products.sku, orders.qty')

最新更新