我在用戶模型中具有以下關係。Rails - 與WHERE&ORDER的has_one關係?
has_many :subscriptions, dependent: :destroy
has_one :subscription, -> { where 'end_date >= ?', Date.today }
:訂閱實質上是他們最新的每月訂閱。 :訂閱是他們以前每月訂閱的一個數組(包括最新的)。他們列出了start_date,end_date,user_id,plan_id,payment_method。
訂閱計劃升級或降級時,我將當前訂閱的end_date更改爲Date.today(表示訂閱今天結束),然後創建一個新的訂閱,該訂閱從今天開始並在一個月內結束。
使End_date成爲Date.today的問題在於WHERE子句將選取已取消的訂閱和新的訂閱。但會贊成已取消的訂閱,因爲SQL查詢在ORDER BY類上生成了針對主要ID升序的粘性。
ORDER BY "subscriptions"."id" ASC LIMIT 1
對於我的生活,我無法弄清楚如何扭轉ORDER BY從ASC到ID的DESC。但我更喜歡它根據created_at時間戳進行排序。以下是適用於排序的代碼,但除了ORDER BY子句之外,我還需要WHERE子句。
has_one :subscription, -> { order 'created_at desc' }
有沒有人想過如何將兩者結合?
你是否嘗試在ruby中對它進行排序而不是SQL? – hd1
不,但如果Rails不允許在同一個has_one關係中組合where子句和order子句,這可能是所需的路由,這實際上令人驚訝。 –