【问题标题】:Ransack issue: default sortRansack 问题:默认排序
【发布时间】: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


    【解决方案1】:

    当你这样做时会发生什么:

    @q = Game.search(params[:q])
    @q.sorts = 'tournaments.number' if q.sorts.blank?
    @q = @q.result(distinct: true).page(params[:page])
    

    【讨论】:

    • 我已编辑帖子以添加更多信息。看一看。谢谢
    【解决方案2】:

    不应该是@q.sorts.blank吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多