Rails7でRansackを利用すると「param is missing or the value is empty: q」のエラーが出た時の対応方法

created
updated

エラー内容

param is missing or the value is empty: q

Ransackのソースード

def index
  @q = Book.ransack(search_params)
  @books = @q.result(distinct: true)
end

private

def search_params
  params.require(:q).permit(
    :name_cont,
    :email_cont,
    :gender_eq,
  )
end

indexアクションで、初期表示とPOST処理を共有しているときに発生します。

参考

Acts-as-taggable-on | Ransack documentation

Ransackのエラーを解決する方法

def index
  @q = Book.ransack(search_params)
  @books = @q.result(distinct: true)
end

private

def search_params
  params.require(:q).permit(
    :name_cont,
    :email_cont,
    :gender_eq,
  ) if params[:q].present?
end

初期表示の時は、nilを返してあげるように変更をします。

  • 初期表示は全件表示
  • 検索項目が入力された時は、WHEREを作成

という処理で、問題なく画面を表示することができます。

TOP