[Rails]Administrateでメインアプリで使っていたヘルパーメソッドを動作させる方法
困ったこと、やりたいこと
\\\メインアプリのヘルパーメソッドが使えない///
\\\メインアプリのヘルパーメソッドが使えない///
Railsアプリで管理画面を作成するために、Administrateというgemを使用した時のことです。
メインアプリのビューで使うためにhelperファイルに定義したhelperメソッドを、admin以下のビューでも使おうとしたところ、下記のエラーが…
image_present?
は、メインアプリのビューで使用しているヘルパーメソッド(自分でhelpers/shops_helper.rb
に定義したもの)です。
メインアプリではNoMethodErrorにならないのに…どうすればいいの???
環境
- Ruby 2.5.1
- Rails 5.0.7.2
- Administrate 0.14.0
結論
1. config/application.rb
ファイルに、下記の設定を記述する。
2. アプリケーション(サーバー)を再起動する
以上。簡単でした笑
module Hoge
class Application < Rails::Application
# 他のconfigが書かれてるかも
# ここから
config.to_prepare do
Administrate::ApplicationController.helper Hoge::Application.helpers
end
# ここまで
end
end
※Hoge
はアプリ名です。通常ならば、1行目のmodule
の後ろにrails newした時のアプリ名が記載されているはずです。
Administrate::ApplicationController.helper Hoge::Application.helpers
のHoge
の部分を、ご自身のアプリ名に置き換えてください。
しっかりGitHubのIssuesに挙げられていて、解決済みだった
Best way to include main app helper modules in administrate? #334
余談
参考記事に挙げたGitHubのIssuesを見ていると、他の方法もあるよう。
こちらの方法は、
1. helpers
ディレクトリの下にadministrate
ディレクトリを作成
2. そこにapplication_helper.rb
ファイルを作成
3. そこにヘルパーメソッドを再度定義する
という方法のようです。
試しにやってみた
module Administrate::ApplicationHelper
def image_present?(shop)
if shop.shop_images.present?
image_tag "#{shop.shop_images[0].shop_image}", class: 'top-cover-img shop-img'
else
image_tag asset_path('no-image.png'), class: 'top-cover-img shop-img'
end
end
end
ポイントは、module
の宣言の際に、クラスの継承?(Administrate::ApplicationHelper
)を記述することだそうです。
これがないとRouting Errorになります。
実現できるが、DRY原則に反する
一応上記の方法でも実現できましたが、同じヘルパーメソッドを2回定義することになるので、DRY原則に反するなと思いました。
無駄なファイルも作成しなくていいので、冒頭の方法をおすすめします。
Author And Source
この問題について([Rails]Administrateでメインアプリで使っていたヘルパーメソッドを動作させる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/sew_sou19/items/b680212465dc1830a82c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .