開発中のRailsアプリに検索機能が既に実装されていて、新たに検索項目を追加しようとしましたが、原因不明のエラーが出力されてしまいました。

今回は、僕が遭遇したエラーに関する解決方法をシェアしていきたいと思います。

やったこと

アプリには既に検索機能が実装されていたので、新しく検索フォームの項目(検索対象のカラム)を追加しました。

その時に追加したコードは以下のような感じでした。

= search_form_for @q do |f|
  ...
  / 追加したコード
  f.search_field :created_at

コードの追加後、アプリを実行してみると「NoMethodError」というエラーが表示されてしまいました。

ネットで調査してみましたが、中々解決方法が見つからず一時間ぐらいエラーに悩まされていましたw

原因

解決方法は簡単な話で、モデル側に実装しているransackable_attributesメソッドの返り値に検索対象のカラムが追加されていなかったので、配列にカラムを追加したら解決しました。

def self.ransackable_attributes(*)
  # 配列に追加
  %w[created_at]
end

自分でメソッドを用意していたにも関わらず、カラムを追加しなきゃいけない事を忘れていましたw

ransackable_attributesメソッド

このメソッドは、検索の対象にしたいカラムを指定することができます。

指定方法は、メソッドの返り値として検索対象のカラム名をシンボルとして格納した配列を返すようにします。

このメソッドを利用することで、意図しないカラムまで検索対象にしてしまうことを予め防ぐことができます。

更新日 : 2020年9月5日

投稿者: TWEI

趣味はプログラミング。 以前は仕事でプログラミングをやっていました。現在はWebエンジニアを目指して勉強中。 勉強で得た知識などをブログで発信していく予定です。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA