簡體   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-2024 STACKOOM.COM