簡體   English   中英

ORDER BY相關模型軌道4

[英]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 。* FROM projects左聯接用戶ON users.id = projects.worker_id ORDER BY projects 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.

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