1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ActiveAdminでの`NoMethodError`解決: `undefined method 'delete' for :ok:Symbol`エラー

Posted at

はじめに

Railsで管理画面を実装している際に、以下のようなエラーに遭遇することがあります。

NoMethodError at /admin/items
undefined method `delete' for :ok:Symbol

この記事では、このエラーの原因とその解決方法について詳しく解説します。

エラーメッセージの詳細

エラーが発生するのは、app/admin/item.rbファイルの以下の部分です。

column :name
column "ステータス" do |item|
  if item.is_active
    status_tag "アクティブ", :ok
  else
    status_tag "非アクティブ"
  end
end

このコードでstatus_tagに渡している:okが原因で、エラーが発生しています。

エラーの原因

status_tagの仕様

  • status_tagメソッドの第2引数には、classオプションを含む文字列またはハッシュを渡す必要があります。
  • :okというシンボルがそのまま渡されると、status_tagメソッドはそのシンボルを扱いきれず、undefined method 'delete' for :ok:Symbolというエラーを引き起こします。

:okシンボルの誤用

:okをシンボルとして渡してしまっているため、status_tagメソッドが期待する形になっていません。その結果、メソッド内部でオプションを扱おうとした際にエラーが発生しています。

解決方法

エラーを解消するには、status_tagの第2引数を文字列またはクラスオプションを指定したハッシュに変更します。

修正前のコード

column :name
column "ステータス" do |item|
  if item.is_active
    status_tag "アクティブ", :ok
  else
    status_tag "非アクティブ"
  end
end

修正後のコード

以下のように、:okclass: "ok"に変更します。

column :name
column "ステータス" do |item|
  if item.is_active
    status_tag "アクティブ", class: "ok"
  else
    status_tag "非アクティブ"
  end
end

修正ポイント

  • status_tag "アクティブ", :okstatus_tag "アクティブ", class: "ok"に変更しました。
  • これにより、:okシンボルを直接渡すのではなく、HTMLクラス名としてclass: "ok"を指定する形になります。

実装後の確認

  1. 修正をapp/admin/item.rbに反映させます。
  2. Railsサーバーを再起動します。
  3. /admin/itemsページにアクセスして、ステータスが正しく表示されるかを確認します。

まとめ

Rails 6.1以降の変更や管理画面のカスタマイズに伴い、status_tagのオプション指定方法に誤りがあると、NoMethodErrorが発生することがあります。このエラーは、シンボルをクラス名として渡す際に文字列に変更することで解消できます。

ポイント

  • status_tagのオプションにはハッシュを使用して、classやその他の属性を指定することが重要です。
  • これにより、NoMethodErrorを解消し、ステータス表示のカスタマイズが正しく行えるようになります。

この記事が同様の問題で困っている方の助けになれば幸いです。参考になった方はぜひ「いいね」や「ストック」をお願いします。

参考リンク

最後に

他にもご質問やご意見があれば、コメントでお気軽にお知らせください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?