2

私は、couchrestを介してrails3beta3とcouchdbを使用しています。アクティブレコードを使用していません。

「ガイド」に複数の「セクション」を追加し、小さなJavaScriptを使用してセクションを動的に追加および削除したいと思います。私はライアンベイツによるすべてのスクリーンキャストを見てきました、そして彼らは非常に助けてくれました。唯一の違いは、すべてのセクションを個々のセクションではなく、セクションの配列として保存したいということです。基本的にこのように:

"sections" => [{"title" => "Foo1", "content" => "Bar1"}, {"title" => "Foo2", "content" => "Bar2"}]

したがって、基本的には、フォームが送信されたときにそのように見えるようにparamsハッシュが必要です。フォームを作成するとき、私は次のことを行っています。

<%= form_for @guide, :url => { :action => "create" } do |f| %>
  <%= render :partial => 'section', :collection => @guide.sections %>   
  <%= f.submit "Save" %>
<% end %>

そして私のセクションの部分は次のようになります:

<%= fields_for "sections[]", section do |guide_section_form| %>
  <%= guide_section_form.text_field :section_title %>
  <%= guide_section_form.text_area :content, :rows => 3 %>
<% end %>

さて、セクション付きのガイドを作成すると、希望どおりに完全に機能しています。paramsハッシュは、私が望むようにセクション配列を与えてくれます。ガイド/セクションを編集して再度保存したい場合に問題が発生します。これは、railsが各フォームフィールドのIDと名前にガイドのIDを挿入しているため、フォーム送信時にparamsハッシュが台無しになっているためです。

明確にするために、新しいリソースの生のフォーム出力は次のとおりです。

<input type="text" size="30" name="sections[][section_title]" id="sections__section_title">
<textarea rows="3" name="sections[][content]" id="sections__content" cols="40"></textarea>

また、既存のリソースを編集すると、次のようになります。

<input type="text" value="Foo1" size="30" name="sections[cd2f2759895b5ae6cb7946def0b321f1][section_title]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_section_title">
<textarea rows="3" name="sections[cd2f2759895b5ae6cb7946def0b321f1][content]" id="sections_cd2f2759895b5ae6cb7946def0b321f1_content" cols="40">Bar1</textarea>

Railsに常に新しいリソースの動作を使用させ、名前と値にIDを自動的に追加しないようにするにはどうすればよいですか。カスタムフォームビルダーを作成する必要がありますか?レールがガイドのIDをそこに入れないようにするために私ができる他のトリックはありますか?私はたくさんのことを試しましたが、何も機能していません。

前もって感謝します!

4

1 に答える 1

1

わかりました、私はうまくいく何かを見つけたと思います。パーシャルの最初の行を次のように変更します。

<%= fields_for "sections", section, :index => "" do |guide_section_form| %>

うまく機能しているようです。このように、新しいフォームと編集フォームの両方が内部で同じように見え、paramsハッシュは必要なように機能します。誰かがこれに何か問題があるか、別の選択肢がある場合は、私に知らせてください。

于 2010-05-19T03:43:37.057 に答える