[英]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.