[Rails]Administrate에서 메인 앱에서 사용하고 있던 도우미 메소드를 동작시키는 방법
4893 단어 administrate루비RailsRails5
곤란한 일, 하고 싶은 것
\\\ 메인 앱의 헬퍼 메소드를 사용할 수 없다//
Rails 앱에서 관리 화면을 만들기 위해 Administrate 이라는 gem을 사용했을 때입니다.
메인 앱의 뷰에서 사용하기 위해 helper 파일에 정의한 helper 메소드를 admin 이하의 뷰에서도 사용하려고 했는데, 아래의 에러가…
image_present?
는 메인 앱의 뷰에서 사용하고 있는 헬퍼 메소드(스스로 helpers/shops_helper.rb
에 정의한 것)입니다.
메인 앱에서는 NoMethodError가 되지 않는데… 어떻게 하면 좋을까? ? ?
환경
결론
1. config/application.rb
파일에 다음 설정을 설명한다.
2. 애플리케이션(서버) 재시작
이상. 쉬웠던 웃음
config/application.rbmodule 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. 거기에 헬퍼 메소드를 재정의한다
라는 방법인 것 같습니다.
시도해 보았습니다.
helpers/administrate/application_helper.rbmodule 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 원칙에 반하지 말라고 생각했습니다.
쓸데없는 파일도 작성하지 않아도 되므로, 시작의 방법을 추천합니다.
Reference
이 문제에 관하여([Rails]Administrate에서 메인 앱에서 사용하고 있던 도우미 메소드를 동작시키는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sew_sou19/items/b680212465dc1830a82c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
module Hoge
class Application < Rails::Application
# 他のconfigが書かれてるかも
# ここから
config.to_prepare do
Administrate::ApplicationController.helper Hoge::Application.helpers
end
# ここまで
end
end
참고 기사에 든 GitHub의 Issues 를 보면 다른 방법도 있는 것 같다.
이 방법은
1.
helpers
디렉토리 아래에 administrate
디렉토리 만들기2. 거기에
application_helper.rb
파일 만들기3. 거기에 헬퍼 메소드를 재정의한다
라는 방법인 것 같습니다.
시도해 보았습니다.
helpers/administrate/application_helper.rb
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 원칙에 반하지 말라고 생각했습니다.
쓸데없는 파일도 작성하지 않아도 되므로, 시작의 방법을 추천합니다.
Reference
이 문제에 관하여([Rails]Administrate에서 메인 앱에서 사용하고 있던 도우미 메소드를 동작시키는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sew_sou19/items/b680212465dc1830a82c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)