Rails nested_forms在动态添加额外对象时不显示字段

时间:2013-04-16 21:17:01

标签: ruby-on-rails nested nested-forms nested-attributes

我目前正在使用nested_forms gem,我正在努力为房产添加多个房东。

目前协会非常深刻: 财产 - >房东 - > Contact_Detail - >地址

在我的属性控制器中,我正在构建关联,并且正确显示初始表单。但是,使用“添加字段”按钮后,没有字段。我知道它与未构建的对象有关,但我无法理解为什么。

这是我的物业模型:

belongs_to :address
belongs_to :estate_agent
belongs_to :property_style

has_and_belongs_to_many :landlord
has_and_belongs_to_many :tenancy_agreement

attr_accessible :landlord_attributes, :address_attributes, :estate_agent_attributes, 
:property_style_attributes, :sector, :reference , :occupied, :available_date, :property_style_attributes,...

accepts_nested_attributes_for :landlord, :address, :estate_agent, :property_style, :tenancy_agreement

这是属性控制器中的新功能:

  def new
    @property = Property.new
    @property.build_address
    @property.landlord.build.build_contact_detail.build_address

    @property.estate_agent_id = current_user.estate_agent_id

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @property }
    end
end

我在这方面做了不少尝试,但是看不出我出错的地方,是否nested_form gem不支持这么多级别的关联或关联类型?

谢谢!

修改的 所做的更改:

belongs_to :address
belongs_to :estate_agent
belongs_to :property_style

has_and_belongs_to_many :landlords
has_and_belongs_to_many :tenancy_agreements

attr_accessible :landlords_attributes, :address_attributes, :estate_agent_attributes, 
:property_style_attributes, :sector, :reference , :occupied, :available_date,  :property_style_attributes,...

accepts_nested_attributes_for :landlords, :address, :estate_agent, :property_style, :tenancy_agreements

属性控制器:

@property.landlords.build.build_contact_detail.build_address

斗地主模特

has_and_belongs_to_many :properties

以下是我的观点:

<%= nested_form_for(@property) do |f| %>
<% if @property.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@property.errors.count, "error") %> prohibited this property from being saved:</h2>

  <ul>
  <% @property.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>
<% end %>

<h2>Landlords</h2>

<%= f.fields_for :landlords %>

<p><%= f.link_to_add "Add a Landlord", :landlords %></p>

 <div class="actions">
<%= f.submit %>
</div>
<% end %> 

2 个答案:

答案 0 :(得分:0)

除非你已经将“房东”指定为irregular inflection,否则Rails会认为它是单数的。多对多关联应以复数形式声明。

尝试将多对多关联更改为:

has_and_belongs_to_many :landlords
has_and_belongs_to_many :tenancy_agreements

您还需要将对这些调用的所有调用也更改为复数。此外,您必须将accepts_nested_attributes_for更改为landlords,将attr_accessiblelandlord_attributes更改为landlords_attributes

答案 1 :(得分:0)

我试图使用awesome-nested-forms和cocoon,但它仍然不起作用。

最后,我通过在partial中而不是在控制器中构建对象找到了一种解决方法。像这样:

<% f.object.build_contact_detail.build_address %>

我希望这有助于其他人!