繁体   English   中英

如何在 Ransack 中设置默认排序参数以避免错误:“undefined method `[]' for nil:NilClass”?

[英]How do I set a default sort parameter in Ransack to avoid error: "undefined method `[]' for nil:NilClass"?

这是一个初学者的问题,希望能有一个简单的答案!

我有一个包含公园索引页的 Rails 7 应用程序。 我正在使用 Ransack,它允许用户按距离评级名称进行排序。 如果设置了排序值(例如,我加载 URL http://localhost:3000/en?q%5Bs%5D=distance+desc )那么它工作正常。 但是,当您在未应用排序的情况下加载公园索引时,出现以下错误:

nil:NilClass 的未定义方法“[]”

如何设置默认的初始排序[:s]值(例如“average_rating desc”)? (注意:如果我简单地删除.order(params[:q][:s])那么距离排序就不能正常工作。)

class ParksController < ApplicationController
  def index
    @parks = @q.result(distinct: true).includes(:visited_users, :favorited_users).order(params[:q][:s]).near(@user_coordinates, 100000000).paginate(page:params[:page], :per_page => 24)
  end
end
class ApplicationController < ActionController::Base
  before_action :set_search

  def set_search
    @q = Park.ransack(params[:q])
  end
end

我尝试添加这一行 (@q.sorts...) 但它没有用:

  def set_search
    @q = Park.ransack(params[:q])
    @q.sorts = ['average_rating desc', 'distance asc'] if @q.sorts.empty?
  end

具有default_order值的搜索链接助手,如 doc https://activerecord-hackery.github.io/ransack/getting-started/simple-mode/#search-link-helper

 @parks = @q.result(distinct: true)
.includes(:visited_users, :favorited_users)
.order(params[:q][:s]) if params[:q].present?  #---> also set defaults for ordering
.near(@user_coordinates, 100000000)
.paginate(page: params[:page], :per_page => 24)
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM