簡體   English   中英

Rails:動態關聯記錄的排序

[英]Rails: Sorting Associated Records Dynamically

試圖尋找一種對父模型中的關聯記錄進行排序的方法,但只能通過在模型文件本身中對編碼進行硬編碼來提出靜態方法。 像這個例子: Rails對相關記錄進行排序

但是我想使用類似RailsCast http://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&Emirates_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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM