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