0

はじめに

has_many :quick_facts というオブジェクト @organization があります。

基本的に、:quick_fact ごとに _form を生成したいのですが、すべての quick_facts を保存する保存ボタンが 1 つあります。

私の2つの問題:

最初の問題:

私のquick_factsには、その情報が事前に入力されていません。私が持っているquick_factごとに空白としてのみ表示されます。

2番目の問題

すべてのフォームに保存ボタンが表示されます

私の悲しい悲しい試み:

- for quick_fact in @organization.quick_facts
 - fields_for :quick_facts do |f|
   = f.error_messages :header_message => FORM_ERROR_HEADER_MESSAGE, :message => FORM_ERROR_MESSAGE
   = f.label :quick_fact, 'QuickFact'
   %br/
   = f.select :quick_fact, QUICK_FACTS, {}
   %br/
   = f.submit 'save', :class => 'button'
4

1 に答える 1

1

一度にすべてを送信したいので、ここでは 1 つのフォームだけが必要です。

これが私がお勧めするものです:

パーシャルを使用してラベルをレンダリングし、クイック ファクトのテキスト オプションを表示します (テキストにしたい場合)。このパーシャルをクイック ファクトごとに 1 回レンダリングする必要があるため、render メソッドで :collection オプションを使用してクイック ファクトのコレクションを指定します。各パーシャルは、現在のクイックファクトの独自のローカル コピーを取得し、quickfact_counter という変数も作成されます。

さらに、:locals オプションを使用してフォームをローカル変数としてパーシャルに渡すと、f.label、f.text_area を実行できるようになります。

結論として、新しいフォームは次のようになります。

<% form_for @organization do |form| %>
  <%= render :partial => "partial_name", :collection => @organization.quick_facts, :locals => {:form => form} %>
  <%=form.submit 'save', :class => 'button'%>
<% end %>

次に、あなたのパーシャルはちょうど

<%= form.label :quick_fact, 'QuickFact' %>
<%= form.text_field :quick_fact %>

さらに手の込んだものにしたい場合は、レイアウトを使用してフォームをレンダリングし、パーシャルに従うようにすることもできますが、始めるにはこれで十分です。コレクションをパーシャルに渡す機能は、Rails のお気に入りの機能の 1 つです。

于 2010-08-12T18:30:50.850 に答える