2

次のように定義されたフォームがあります。

form_for(@model) do |f|
    # Really a lot happens here 
end

最初の行を調整できる方法があるかどうか疑問に思っていました:form_for(@model)

最初に、ヘルパー関数を使用できる可能性があると考えました。

def my_form
   if some_condition
      form_for(@model)
   else
      form_for [@model, @nested_model]
   end
end

それを私のフォーム呼び出しに埋め込みます。このような:

my_form do |f|
    # Really a lot happens here 
end

しかし、「No block given」エラーが発生します。誰かが指摘できますか - なぜ、どのように修正するのですか? 多分私が使用できる他のアプローチがありますか?

なぜそれが必要なのか私に聞かないでください。物事を可能な限りDRYに保つためだけに。フォームは再利用可能であるべきです。

4

1 に答える 1

2

ブロックを に渡す必要がありますmy_formyieldその方法は、ブロックを移動させたい場所を含めることです。

def my_form
   if some_condition
      form_for(@model) { |f| yield f }
   else
      form_for [@model, @nested_model] { |f| yield f }
   end
end

これは、ビューで渡すブロックを取る必要があります。

my_form do |f|
    # Really a lot happens here 
end
于 2013-09-03T14:29:44.880 に答える