我通过couchrest使用rails3 beta3和couchdb。我没有使用有效记录。
我想在“指南”中添加多个“部分”,并通过一些小的动态添加和删除部分。我查看了Ryan Bates的所有截屏视频,他们帮助极大。唯一的区别是我想将所有部分保存为部分数组而不是单个部分。基本上是这样的:
"sections" => [{"title" => "Foo1", "content" => "Bar1"}, {"title" => "Foo2", "content" => "Bar2"}]
所以,基本上我需要在提交表单时使用params hash。当我创建表单时,我正在执行以下操作:
<%= 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 hash给我一个像我想要的那样的数组。当我想要编辑指南/部分并再次保存它们时会出现问题,因为rails会在每个表单字段的id和名称中插入指南的id,这会在表单提交时搞砸params hash。
为了清楚起见,这是新资源的原始表单输出:
<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添加到名称和值。我是否必须创建自定义表单构建器?还有其他一些技巧可以阻止rails将指南的ID放在那里吗?我尝试了很多东西,没有任何工作。
提前致谢!
答案 0 :(得分:1)
好的,我想我已经找到了可行的方法。将部分的第一行更改为:
<%= fields_for "sections", section, :index => "" do |guide_section_form| %>
似乎工作得很好。这样,新的和编辑形式在引擎盖下看起来都是一样的,并且params散列就像我需要它一样。如果有人发现此问题或有其他选择,请告诉我。