Ruby on rails 4 Rails ActiveRecord 4.2自定义排序顺序
我试图将自定义范围或类方法应用于以下ActiveRecord模型,但我不确定遵循Rails最佳实践的最佳方法或实现 请注意,为了便于解释,这只是一个简化的示例项目Ruby on rails 4 Rails ActiveRecord 4.2自定义排序顺序,ruby-on-rails-4,activerecord,named-scope,Ruby On Rails 4,Activerecord,Named Scope,我试图将自定义范围或类方法应用于以下ActiveRecord模型,但我不确定遵循Rails最佳实践的最佳方法或实现 请注意,为了便于解释,这只是一个简化的示例项目 # event_booking.rb class EventBooking < ActiveRecord::Base has_many :events, -> { order('event_type ASC') }, dependent: :destroy end # event.rb class Event <
# 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
调用的结果将作为对API调用的JSON响应发送。目前,这种重新排序是在客户端完成的,但是我试图在返回到客户端之前以所需的顺序呈现初始结果 您可以使用sql case语句来控制排序
has_many :events, ->{ "ORDER BY CASE WHEN event_type = 'morning' THEN '1' WHEN event_type = 'afternoon' THEN '2' WHEN event_type = 'evening' THEN '3' END" }
我会小心的。它会使以任何其他顺序显示
事件\u预订。事件变得困难(有点像一个默认\u范围
。更安全的做法是将此范围放在事件模型上,然后像事件\u预订、事件、事件\u类型\u顺序
或类似的方式调用它。我采纳了您的建议,在事件模型中创建了一个命名范围,而不是通过关系传递范围。非常感谢。
- morning
- afternoon
- evening
has_many :events, ->{ "ORDER BY CASE WHEN event_type = 'morning' THEN '1' WHEN event_type = 'afternoon' THEN '2' WHEN event_type = 'evening' THEN '3' END" }