我正在通过 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放在那里吗?我已经尝试了一堆东西,但没有任何效果。
提前致谢!