Rails的pluralize
方法沒有像我想要的那樣工作(單詞不是英文的),所以我着手嘗試自己的解決方案。我在ApplicationController
開始用這種方法簡單:Rails返回完整對象而不是整數
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,它實際上什麼都不做,並且仍然返回相同的錯誤:undefined method ``inflect' for #<#<Class:0x3ea79f8>:0x3b07498>
參照`inflect(article.word_count, "word")
行。
後來我想也許inflect
已經是Rails的方法,它是某種命名衝突的,但不要緊,我改變了方法的名稱,它不斷給我同樣的錯誤:undefined method ``whatever' for #<#<Class:0x3ea79f8>:0x3b07498>
我然後在控制檯上測試它,它工作正常。這是怎麼回事?
放入ApplicationHelper你活用方法,而不是ApplicationController中 – house9 2013-02-17 00:05:51
@ house9也做到了,謝謝!你可以擴展爲什麼我應該把它放在那裏,而不是在ApplicationController上? – 2013-02-17 00:24:27
...添加了一些額外的信息作爲答案 – house9 2013-02-18 02:33:00