0

search_form次のような名前のメソッドを持つヘルパーがあります。

module Admin::BaseHelper
  def search_form(*args)
    # my great code here
  end
end

HAML コードでこのメソッドを呼び出すには、次のようにします。

= search_form
= search_form()
= search_form(param1: "value1", param2: "value2"...)

私の問題は、この最初の呼び出しにあります。HAML ファイルでこれを行うと、ヘルパーがレンダリングされます。ファイル名が _search_form.html.haml の場合を除きます。そうですか、 を返しますnil

ヘルパーにエラーを発生させると、メソッドが呼び出されていないことに気付きますが、何が呼び出されているのか、なぜ呼び出されているのかを見つけることができません。

2 行目と 3 行目の構文を使用すると、ヘルパー メソッドを呼び出して期待どおりに動作します。

私の質問は次のとおりです。これは Rails の標準的な動作ですか、それともバグですか?

4

1 に答える 1

3

デフォルトでは、Rails はパーシャルと同じ名前のローカル変数を探しますが、これは既存のメソッド名と競合する可能性があります。

これを回避する 1 つの方法は、パーシャル内のメソッドを単純に再定義することです。

<% search_form = self.search_form %>
# Rest of the partial's code
于 2013-09-28T02:42:05.940 に答える