1

我目前正在使用nested_forms gem,并且我正在尝试能够将多个房东添加到一个属性中。

目前关联比较深:房产->房东->联系方式->地址

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

这是我的属性模型:

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

这是 Property 控制器中的新功能:

  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 %> 
4

2 回答 2

0

除非您将“地主”指定为不规则变形,否则 Rails 将假定它是单数。多对多关联应以复数形式声明。

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

has_and_belongs_to_many :landlords
has_and_belongs_to_many :tenancy_agreements

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

于 2013-04-17T03:31:38.377 回答
0

我尝试同时使用 awesome-nested-forms 和 cocoon ,但它仍然无法正常工作。

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

<% f.object.build_contact_detail.build_address %>

我希望这对其他人有帮助!

于 2013-04-19T17:01:45.593 回答