4

在我的 rails 应用程序中,我有两个模型, aClientPage和 a ContentSection,其中ClientPage has_many :content_sections. 我将nested_formgem 用于两个模型以使用相同的形式进行编辑。只要ClientPage至少有一个,它就可以正常工作ContentSection,但如果没有关联ClientSections,则 usingnested_formlink_to_add方法会抛出以下内容NoMethodError

undefined method `values_at' for nil:NilClass

表格的结构如下:

<%= nested_form_for page, form_options do |f| %>
  # ClientPage fields

  # ClientSections

  <%= f.link_to_add "Add new section", :content_sections %>
<% end %>

只要至少有一个ClientSection与页面相关联,就可以正常工作。一旦没有,就会抛出错误。删除link_to_add也会停止抛出错误。(实际上在 下还有第二个嵌套模型ContentSection,如果没有关联模型,也会出现同样的问题。)

不确定我缺少什么我相当明显的东西,但任何指针或建议将不胜感激。

4

1 回答 1

6

终于解决了这个问题——错误是由于我以一种稍微不标准的方式使用 gem 造成的。在表单中,不是以标准方式呈现所有内容部分:

<%= f.fields_for :content_sections do |section_form| %>
  # section fields
<% end %>

我把它放在一个循环中,因为我需要每个项目的索引(它不存储在模型本身中):

<% page.content_sections.each_with_index do |section, index| %>
  <%= f.fields_for :content_sections, section do |section_form| %>
    # section fields
  <% end %>
<% end %>

这样做的问题是,fields_for如果关联为空,则不会调用该方法,因此 gem 无法为对象构建蓝图(用于在link_to_add调用时添加额外的项目)。

解决方案是确保fields_for即使关联为空也被调用:

<% if page.content_sections.empty? %>
  <%= f.fields_for :content_sections do |section_form| %>
    # section fields
  <% end %>
<% end %>
于 2013-07-15T01:08:31.137 回答