0

Railsの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をスローしません、それは実際には何もしません、そしてそれでも同じエラーを返します:行undefined method ``inflect' for #<#<Class:0x3ea79f8>:0x3b07498>を参照して`inflect(article.word_count, "word")

それから、おそらくinflectすでにRailsメソッドであり、ある種の名前の競合であると思いましたが、メソッドの名前を何に変更しても、同じエラーが発生し続けます。undefined method ``whatever' for #<#<Class:0x3ea79f8>:0x3b07498>

次に、コンソールでテストしましたが、正常に機能しました。どうしたの?

4

1 に答える 1

1

inflectメソッドをApplicationControllerではなくApplicationHelperに配置します

デフォルトでは、ヘルパーのすべてのコードがビューに混在しています

ビューはそれ自体のエンティティであり、コントローラーの一部ではありません。ビューインスタンスが作成されると(コントローラーアクションの実行時に自動的に)、コントローラーアクションで定義したインスタンス変数が渡されますが、コントローラーメソッドにはアクセスできません。直接

注:マクロを使用して、コントローラーでメソッドを定義し、ビューに公開することができますhelper_method-詳細については、この投稿を参照してください-Controller helper_method

ただし、一般的には、コントローラーではなくヘルパークラスでビューヘルパーメソッドを定義します。

于 2013-02-18T02:32:25.357 に答える