2

我正在通过 couchrest 使用 rails3 beta3 和 couchdb。我没有使用活动记录。

我想向“指南”添加多个“部分”,并通过一些 JavaScript 动态添加和删除部分。我看过 Ryan Bates 的所有截屏视频,他们帮助很大。唯一的区别是我想将所有部分保存为部分数组而不是单个部分。基本上是这样的:

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

所以,基本上我需要参数哈希在提交表单时看起来像这样。当我创建我的表单时,我正在执行以下操作:

<%= 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 哈希就像我想要的那样给了我一个sections 数组。当我想要编辑指南/部分并再次保存它们时,问题就出现了,因为 rails 将指南的 id 插入到每个表单字段的 id 和 name 中,这会破坏表单提交时的 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 回答