0

我有一个 Rails 表单,我想在其中添加功能,以将更多字段添加到嵌套形式的多对关系中。我有一个像这样的表格;

= form_for @company do |f|
  = f.label :name, "Company name"
  = f.text_field :name
  = f.label :homepage_url, "Company website"
  = f.text_field :homepage_url, placeholder: "www.mycompanywebsite.com"
  = render "domains_form"
  %div{class: "add_more_button"}
    = link_to "Add more domains", "add_domain", remote: true, data: {mini: "true", theme: "b", iconpos: "left", icon: "plus",  role: "button"}, id:"more_email_domains"
  = f.submit "Continue", data: {theme: "a", icon: "arrow-r", iconpos: "right"}

部分“domain_form”看起来像这样;

= fields_for @company do |f|
  = f.fields_for :domains do |d|
    = d.label :identifier, "Domain name"
    = d.text_field :identifier

这给了我这样的错误;

undefined method `[]' for nil:NilClass
Extracted source (around line #2):

1: %div
2:   = fields_for @company do |f|

似乎部分找不到@company 实例,但它怎么可能呢?由于主模板可以访问实例,所以部分模板不应该也可以访问实例。我是否需要将公司实例作为区域设置专门传递。

这个问题更可能出现在 fields_for 调用中,因为我没有在任何 form_builder 对象上使用它,而是将它用作全局方法。由于 rails api 建议该方法可以独立使用http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_form,这样第一个 fields_for 采用父对象,以下一个采用孩子,根据我的假设,这应该可以正常工作。你能帮我解决这个问题吗?

谢谢

4

1 回答 1

0

我现在不知道如何编写 haml 语法,但是您是否尝试过遍历您的对多关联?

# _form.html.erb
<%= @company.domains.each do |domain| %>
  <%= render "domain_form", domain: domain %>
<% end %>

# _domain_form.html.erb
<%= fields_for "company[domains_attributes][], domain do |d| %>
  <%= d.label :identifier, "Domain name" %>
  <%= d.text_field :identifier %>
<% end %>

# company.rb
attr_accessible ..., :domains_attributes
has_many :domains
accepts_nested_attributes_for :domains

我希望这有帮助。

于 2013-06-05T14:54:21.623 回答