[RUBY-ON-RAILS] NoMethodError 레일 컨트롤러에서 도우미 메서드를 호출 할 때
RUBY-ON-RAILSNoMethodError 레일 컨트롤러에서 도우미 메서드를 호출 할 때
내 컨트롤러 클래스 중 하나에서 내 도우미 모듈 중 하나에 정의 된 방법에 액세스하려고 할 때 나는 NoMethodError을 얻고있다. 아래 그림과 같이 모든 기호 : 내 레일 응용 프로그램과의 헬퍼 클래스의 방법을 사용합니다 :
class ApplicationController < ActionController::Base
helper :all
.
.
end
나의 이해는이 내 컨트롤러 클래스의 모든 자동 그러므로 컨트롤러로 모든 메소드에 혼합, 응용 프로그램 / 헬퍼 디렉토리에있는 도우미 모듈을 모두 포함해야한다는 것입니다. 이 올바른지?
내가 명시 적으로 컨트롤러 내에서 도우미 모듈을 포함하면 모든 것이 제대로 작동합니다.
해결법
-
==============================
1.도우미 : 모두 (예, 그들 모두) 뷰에서 사용할 수있는, 그것은 컨트롤러로를 포함하지 않는 모든 헬퍼한다.
도우미 : 모두 (예, 그들 모두) 뷰에서 사용할 수있는, 그것은 컨트롤러로를 포함하지 않는 모든 헬퍼한다.
잘, 컨트롤러 코드, 당신은 컨트롤러에서 도우미를 포함하거나 별도의 모듈을 만들고있는 것을 포함하거나 할 수있다 도우미 UI 코드와 컨트롤러이기 때문에 당신은 도우미 매우 바람직하지 않다 컨트롤러 사이에 약간의 코드를 공유하고자하는 경우 컨트롤러와뿐만 아니라 도우미.
-
==============================
2.이미 템플릿 엔진에 포함 된 헬퍼 메소드를 사용하려면 :
이미 템플릿 엔진에 포함 된 헬퍼 메소드를 사용하려면 :
컨트롤러 방법 'number_to_currency'을 호출의 사용 예제 :
# rails 3 sample def controller_action @price = view_context.number_to_currency( 42.0 ) end # rails 2 sample def controller_action @price = @template.number_to_currency( 42.0 ) end
-
==============================
3.당신이 컨트롤러와 도우미 / 뷰 사이의 방법을 공유 할 필요가있는 경우, 당신은 단지 컨트롤러의 상단에 'helper_method'를 통해 정의 할 수 있습니다 :
당신이 컨트롤러와 도우미 / 뷰 사이의 방법을 공유 할 필요가있는 경우, 당신은 단지 컨트롤러의 상단에 'helper_method'를 통해 정의 할 수 있습니다 :
class ApplicationController < ActionController::Base helper_method :my_shared_method ... def my_shared_method #do stuff end end
희망이 도움이
-
==============================
4.도우미의 방법에서 얻을 수있는 한 가지 방법은 도우미 파일을 포함하는 것입니다.
도우미의 방법에서 얻을 수있는 한 가지 방법은 도우미 파일을 포함하는 것입니다.
include LoginHelper cool_login_helper_method(x,y,z)
이 컨트롤러의 범위에 해당 도우미 모듈에서 모든 방법을 제공합니다. 그것은 항상 좋은 일이 아니다. 임뷰는 그 도우미의 힘으로, 객체를 생성, 분리 된 범위를 유지하고 메서드를 호출하는 데 사용 :
login_helper = Object.new.extend(LoginHelper) login_helper.cool_login_helper_method(x,y,z)
도우미 : 모든 귀하의 의견을 모두 사용할 수 도우미 모듈의 모든로부터 헬퍼 메소드를 모두 만들지 만, 그것은 당신의 컨트롤러에 대한 아무것도하지 않는다. 도우미 방법은 뷰에서 사용하도록 설계 일반적으로 컨트롤러에서 액세스 할 수 없습니다해야하기 때문이다. 레일의 최신 버전에서이 옵션은 기본적으로 모든 컨트롤러에 항상이다.
-
==============================
5.레일 3의 경우, 컨트롤러에 view_context 방법을 사용하십시오
레일 3의 경우, 컨트롤러에 view_context 방법을 사용하십시오
def foo view_context.helper_method ...
다음 예는 다음과 같습니다 http://www.christopherirish.com/2011/10/13/no-view_context-in-rails-3-1-changes/
-
==============================
6.나는이 가장 필요로 할 찾을 시간은 플래시, 또는 사용자 지정 오류 검사기를 쓰기위한 것입니다. 그것의 좋은 어떤 상황에서 플래시 메시지에 LINK_TO 도우미 등을 사용합니다. 나는 컨트롤러에 ActionView 도우미를 얻기 위해 다음과 같은 솔루션을 사용합니다. 위에서 언급 한 바와 같이 다른 사람이 더 나은 아이디어가있는 경우,이 휴식 MVC의 분리, 그래서 알려 명심!
나는이 가장 필요로 할 찾을 시간은 플래시, 또는 사용자 지정 오류 검사기를 쓰기위한 것입니다. 그것의 좋은 어떤 상황에서 플래시 메시지에 LINK_TO 도우미 등을 사용합니다. 나는 컨트롤러에 ActionView 도우미를 얻기 위해 다음과 같은 솔루션을 사용합니다. 위에서 언급 한 바와 같이 다른 사람이 더 나은 아이디어가있는 경우,이 휴식 MVC의 분리, 그래서 알려 명심!
와 ApplicationController 아래이 추가 :
class Something include Singleton include ActionView::Helpers::UrlHelper end
과와 ApplicationController 안에 추가
def foo Something.instance end
그리고 마지막으로, 당신은 도우미 코드에 액세스 할 컨트롤러 :
messages << "<li class='error'>Your have an Error!<%= foo.link_to('Fix This', some_path) %></li>"
어떤 식 으로든 도움이되기를 바랍니다!
-
==============================
7.아마도 헬퍼 메소드를 사용하는 청소기입니다 :
아마도 헬퍼 메소드를 사용하는 청소기입니다 :
class FooController < ActionController::Base def action self.class.helpers.helper_method arg end end
-
==============================
8.어떤 도우미는 컨트롤러에 @template 변수를 사용하여 액세스 할 수 있습니다.
어떤 도우미는 컨트롤러에 @template 변수를 사용하여 액세스 할 수 있습니다.
-
==============================
9.컨트롤러가 자동으로 액세스 도우미 메서드 수 없습니다. 우리는 응용 프로그램 컨트롤러에 포함해야합니다.
컨트롤러가 자동으로 액세스 도우미 메서드 수 없습니다. 우리는 응용 프로그램 컨트롤러에 포함해야합니다.
모듈 ApplicationHelper
def hello_message "Hello World" end
종료
클래스와 ApplicationController
include ApplicationHelper def message hello_message end
종료
-
==============================
10.도우미 즉, 템플릿을 사용할 수 있습니다. 하지 컨트롤러에 전망. 당신이 방법에 액세스 할 수없는 이유의 그. 두 컨트롤러 사이 방법을 공유하려는 경우 예를 들어,와 ApplicationController에 정의해야 할 것이다. 도우미 : 모두는 당신이 응용 프로그램의 모든 도우미 파일에 정의 어떤 방법 / 헬퍼 디렉토리가 어떤 템플릿을 사용할 수 있다고 말한다.
도우미 즉, 템플릿을 사용할 수 있습니다. 하지 컨트롤러에 전망. 당신이 방법에 액세스 할 수없는 이유의 그. 두 컨트롤러 사이 방법을 공유하려는 경우 예를 들어,와 ApplicationController에 정의해야 할 것이다. 도우미 : 모두는 당신이 응용 프로그램의 모든 도우미 파일에 정의 어떤 방법 / 헬퍼 디렉토리가 어떤 템플릿을 사용할 수 있다고 말한다.
-
==============================
11.하나의 모듈 또는 사용 @template 변수를 만들 :이 작업을 수행하는 방법은 두 가지가 있습니다. 자세한 내용은이 체크 아웃 http://www.shanison.com/?p=305
하나의 모듈 또는 사용 @template 변수를 만들 :이 작업을 수행하는 방법은 두 가지가 있습니다. 자세한 내용은이 체크 아웃 http://www.shanison.com/?p=305
-
==============================
12.당신은 당신의 응용 프로그램 내에서 ApplicationHelper이있는 경우 / 헬퍼는 ApplicationHelper을 포함하여 컨트롤러를로드하는 것보다 폴더. 기본적으로 레일은 컨트롤러와 같은 이름을 가진 도우미 모듈을로드합니다. (예컨대 ArticlesController는 ArticlesHelper로드한다). 당신은 당신이 컨트롤러의 각 하나를 업로드해야보다 당신은 많은 모델 (; 게시물 카테고리 예를 들어, 기사)가있는 경우. 워드 프로세서
당신은 당신의 응용 프로그램 내에서 ApplicationHelper이있는 경우 / 헬퍼는 ApplicationHelper을 포함하여 컨트롤러를로드하는 것보다 폴더. 기본적으로 레일은 컨트롤러와 같은 이름을 가진 도우미 모듈을로드합니다. (예컨대 ArticlesController는 ArticlesHelper로드한다). 당신은 당신이 컨트롤러의 각 하나를 업로드해야보다 당신은 많은 모델 (; 게시물 카테고리 예를 들어, 기사)가있는 경우. 워드 프로세서
돕는 사람
module PostsHelper def find_category(number) return 'kayak-#{number}' end def find_other_sport(number) "basketball" #specifying 'return' is optional in ruby end end module ApplicationHelper def check_this_sentence 'hello world' end end
예 컨트롤러
class ArticlesController < ApplicationController include ApplicationHelper include PostsHelper #...and so on... def show#rails 4.1.5 #here I'm using the helper from PostsHelper to use in a Breadcrumb for the view add_breadcrumb find_other_sport(@articles.type_activite), articles_path, :title => "Back to the Index" #add_breadcrumb is from a gem ... respond_with(@articles) end end
-
==============================
13.당신이 당신의 application_controller.rb 파일을 변경하는 경우 ...
당신이 당신의 application_controller.rb 파일을 변경하는 경우 ...
class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper end
... 모든 헬퍼는 모든 컨트롤러에 사용할 수 있습니다.
from https://stackoverflow.com/questions/453762/nomethoderror-when-trying-to-invoke-helper-method-from-rails-controller by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 보석은 권한 문제를 설치 (0) | 2020.02.22 |
---|---|
[RUBY-ON-RAILS] 루비에 낙타 표기법에 snake_case에서 문자열 변환 (0) | 2020.02.22 |
[RUBY-ON-RAILS] form_for의 차이, 때 form_tag? (0) | 2020.02.22 |
[RUBY-ON-RAILS] 어떻게 어떤 데이터베이스와 루비 온 레일즈를 구성? (0) | 2020.02.22 |
[RUBY-ON-RAILS] 아마존 S3에서 파일을 다운로드 send_file 사용하십니까? (0) | 2020.02.22 |