[英]ORDER BY related model rails 4
我一直在嘗試在Rail項目的索引視圖中添加order_by過濾器。
到目前為止,它已按過濾器的某些基本順序運行良好。
我現在正在嘗試通過附加到我的項目的工作人員登錄進行訂購。
class Project < ActiveRecord::Base
belongs_to :worker, class_name: User, foreign_key: "worker_id"
我在模型中使用“范圍”對數據進行排序,到目前為止,這是我得到的:
scope :worker_order, -> (order) {joins('LEFT JOIN users ON users.id = projects.worker_id')
.order('users.login' => order)}
但是我得到這個錯誤代碼:
Mysql2 :: Error:“ order子句”中的未知列“ projects.users.login”:SELECT
projects
。* FROMprojects
左聯接用戶ON users.id = projects.worker_id ORDER BYprojects
。users.login
DESC LIMIT 30偏移0
我也嘗試了其他方法來做到這一點:
scope :worker_order, -> (order) {joins('LEFT JOIN users ON users.id = projects.worker_id')
.order(:login => order)}
要么 :
scope :worker_order, -> (order) {includes(:worker)
.order('users.login' => order)}
我真的不知道這是否是處理Rails排序的好方法,但是它對於篩選非常有效,而且我真的不明白為什么當排序方法不起作用時,我對擁有項目的客戶進行篩選的原因。
謝謝你的幫助
嘗試使用字符串
scope :worker_order, -> (order) { joins('...').order("users.login #{order == 'desc' ? 'desc' : 'asc'}")
order == 'desc' ? 'desc' : 'asc'
order == 'desc' ? 'desc' : 'asc'
部分是為了防止SQL注入。 如果您確定該order
不能被您的用戶操縱,則可以編寫該order
:
scope :worker_order, -> (order) { joins('...').order("users.login #{order}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.