2

を使用してかなり複雑なフォームを設定しようとしていform_forます。このフォームは複数のビューにある必要があります。いくつかのフィールドはすべてのアクションで使用でき、他のフィールドは個々のアクションに固有です。

コードの重複を避けるために、次のようにレイアウトを使用して一般的な部分をレンダリングすると考えました。

# layout.html.erb
<%= form_for @instance do |f| %>
  <%= f.text_field :foo %><!-- This field needs to be available in all views -->
  <...><!-- Additional non-form related html -->
  <%= yield %>
  <%= f.submit %>
<% end %>

# first_view.html.erb
<% f.fields_for :bar do |b| %>
  <%# Fields %><!-- These fields should only be available in first_view -->
<% end %>

# second_view.html.erb
<% f.text_field :baz %><!-- This field should only be available in second_view -->

さて、問題はf、レイアウトからビューにローカル変数として渡すことができないことです。インスタンス変数 (例: @f = f) を設定して、ビューでアクセスすることさえできません。

どうすればこれを行うことができますか? より良い実装のための提案は大歓迎です。

4

2 に答える 2

0

結局、私は簡単で誰にでもできる解決策を採用することにしました。を個別のビューに移動しform_for、一般的なフィールドをパーシャルに配置しました。つまりform_for、部分のレンダリングだけでなく、複製も行う必要がありますが、それは許容できます。

于 2010-10-16T13:40:43.147 に答える
0

':bar' または ':baz' フィールドをローカルとして取り、そのパーシャルをレンダリングするビューによって渡されるパーシャルにフォームを抽出できますか?

すなわち

render :partial => 'complex_form' :locals => { :text_field_param => :bar }

上記の行は first_view で呼び出され、パーシャルには特殊なテキスト フィールドの「text_field_param」を使用するすべてのフォーム ロジックとマークアップが含まれます。

于 2010-10-13T23:48:25.307 に答える