2
我想將自定義作用域或類方法應用於以下ActiveRecord模型,但我不確定遵循Rails最佳做法的最佳方法或實現。Rails ActiveRecord 4.2自定義排序順序
請注意,這只是一個簡化的示例項目,用於解釋目的。
# event_booking.rb
class EventBooking < ActiveRecord::Base
has_many :events, -> { order('event_type ASC') }, dependent: :destroy
end
# event.rb
class Event < ActiveRecord::Base
belongs_to :event_booking
end
# event_bookings_controller.rb
class EventBookingController < ApplicationController
def show
@event_booking = EventBooking.find(params[:id])
end
end
事件模型具有1〜3中不同的字符串值(即上午,下午,晚上)的EVENT_TYPE屬性。
當前的問題是字符串不是按字母順序的,因此我不能使用標準的ASC或DESC來訂購事件集合。
到目前爲止,我已經考慮對事件模型進行3個單獨的查詢,然後將結果組合到類方法中的單個數組中。我也試圖做一些類似於以下的事情,但沒有成功。
# event_booking.rb
class EventBooking < ActiveRecord::Base
has_many :events, -> { order(%w(morning afternoon evenint).map { |cond| where(event_type: "#{cond}") }.join(', ')) }, dependent: :destroy
end
我的目標是擁有一個有序的事件集合使用下面的EVENT_TYPE爲了類似@event_booking.events
或@event_booking.events_by_type
東西控制器訪問:
- morning
- afternoon
- evening
通話的結果是否被接收爲對API調用的JSON響應。目前,這種重新排序是在客戶端完成的,但是我試圖在返回給客戶端之前按照期望的順序呈現初始結果。
我會小心這一點。它可以很難以任何其他順序顯示'event_booking.events'(類似於'default_scope'。更安全的做法可能是將這個範圍放在事件模型上,然後像調用event_bookings.events.event_type_order一樣 – Dan
我接受了你的建議,並在事件模型中創建了一個命名範圍,而不是通過關係傳遞範圍。非常感謝。 –