2013-02-17 1 views
0

레일즈의 pluralize 메서드는 내가 원하는 (영어가 아닌) 단어처럼 작동하지 않아서 내 솔루션을 시험해 보았습니다. 나는 ApplicationController이 방법으로 간단한 시작 :정수 대신 전체 객체를 반환하는 레일

def inflect(number, word) 
    if number.to_i > 1 
    word = word + "s" 
    end  
    return "#{number} #{word}" 
end 

그리고 내보기에 등을 전화 :

<% @articles.each do |article| %> 
    <%= inflect(article.word_count, "word") %> 
    <%= inflect(article.paragraph_count, "paragraph") %> 
    ... 
<% end %> 

하지만이 날 잡았어 : 나는 그것이 이상한 발견

undefined method `inflect' for #<#<Class:0x3ea79f8>:0x3b07498> 

정수라고 생각했을 때 본격적인 객체를 참조 했으므로 콘솔에서 테스트했습니다.

article = Article.first 
=> (object hash) 
article.word_count 
=> 10 
article.word_count.is_a?(Integer) 
=> true 

그래서 나는 words = article.word_count.to_i을 던졌지 만 TypeError를 던지지는 못했지만 실제로 아무 것도하지 않고 `inflect(article.word_count, "word") 줄과 관련하여 동일한 오류 : undefined method ``inflect' for #<#<Class:0x3ea79f8>:0x3b07498>을 반환합니다. 그것은 나에게 같은 오류를주고 유지

가 그럼 난 아마 inflect 이미 레일 방법이라고 생각하고 충돌을 명명의 일종이었다,하지만 난에 메서드의 이름을 변경 중요하지 않습니다 undefined method ``whatever' for #<#<Class:0x3ea79f8>:0x3b07498>

I 그런 다음 콘솔에서 테스트하여 정상적으로 작동합니다. 무슨 일이야? 보기 인스턴스가 만들어 질 경우 당신의 도우미에서 모든 코드의 의견

뷰가 자신의 실체에 혼합 기본적으로

+1

이 활용의 ApplicationHelper의 방법, 그것을했다 house9 @하지와 ApplicationController – house9

+0

, 덕분에 넣고하지 컨트롤러의 헬퍼 클래스에서 뷰 헬퍼 메소드를 정의하는 것입니다! ApplicationController가 아닌, 왜 내가 거기에 넣어야하는지, 왜 확장 할 수 있습니까? –

+0

... 대답과 함께 몇 가지 추가 정보를 추가했습니다 – house9

답변

1

Put your inflect method in ApplicationHelper, not ApplicationController

, 그것은, 컨트롤러의 일부가 아닌 (자동 때 컨트롤러 액션 컨트롤러 액션에 정의 된 인스턴스 변수를 직접 전달하지만 컨트롤러 메서드에 직접 액세스 할 수는 없습니다.

참고 : helper_method 매크로를 사용하여 컨트롤러에 뷰에 표시 할 메서드를 정의 할 수 있습니다. 이 게시물에 대한 자세한 내용은 - Controller helper_method

그러나 일반적으로 당신은

+0

그레이트 대답, 감사합니다! –

관련 문제