【发布时间】:2016-06-17 07:31:24
【问题描述】:
我有接下来的两个模型:
class Game
belongs_to :tournament, inverse_of: :games
validates_presence_of :name
end
class Tournament
has_many :games, dependent: :destroy
validates_numericality_of :number
end
所以,我有一个显示锦标赛编号的游戏列表,我希望默认情况下按锦标赛编号对列表进行排序。
在我的控制器中,我有这样的东西:
@q = Game.search(params[:q])
@q.sorts = 'tournaments_number' if q.sorts.blank?
@q = @q.result(distinct: true).page(params[:page])
问题是它没有按数字排序列表。看一下查询
@q = Game.search(params[:q])
@q.sorts = 'tournaments_number' if q.sorts.blank?
puts @q.result.to_sql # => SELECT * FROM games
@q = @q.result(distinct: true).page(params[:page])
但如果我按游戏领域排序,效果很好:
@q = Game.search(params[:q])
@q.sorts = 'name' if q.sorts.blank?
puts @q.result.to_sql # => SELECT * FROM games ORDER BY name
@q = @q.result(distinct: true).page(params[:page])
你知道我做错了什么吗?如何按关联属性排序?
编辑:
我发现,如果我执行下一个操作,则顺序有效:
@q = Game.includes(:tournament).order('tournaments.number').search(params[:q])
puts @q.result.to_sql # => SELECT * FROM games INNER JOIN tournaments ON games.tournament_id = tournaments.id ORDER BY tournaments.number
@q = @q.result(distinct: true).page(params[:page])
问题是,虽然我可以添加一些条件,但我需要使它与 ransack 一起使用,因为我在其他地方使用了 sort_link,但它不起作用。
<%= sort_link(@q, 'tournaments.number') %>
【问题讨论】:
标签: ruby-on-rails activerecord arel ransack