1

私は現在、nested_forms ジェムを使用しており、プロパティに複数の家主を追加できるようにしようとしています。

現時点では、関連付けは非常に深いです: プロパティ -> 家主 -> 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ジェムがこれほど多くのレベルの関連付けまたは関連付けのタイプをサポートしていないのは問題ですか?

ありがとう!

編集 変更が行われました:

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

awesome-nested-forms と cocoon の両方を使用しようとしましたが、まだ機能しません。

最終的に、コントローラーではなくパーシャルでオブジェクトを構築することで回避策を見つけました。このような:

<% f.object.build_contact_detail.build_address %>

これが他の誰かに役立つことを願っています!

于 2013-04-19T17:01:45.593 に答える
0

"landlord" を不規則な変化として指定しない限り、Rails はそれが単数形であると想定します。多対多の関連付けは、複数形で宣言する必要があります。

多対多の関連付けを次のように変更してみてください。

has_and_belongs_to_many :landlords
has_and_belongs_to_many :tenancy_agreements

これらの呼び出しもすべて複数形に変更する必要があります。さらに、 をに、 をからaccepts_nested_attributes_forに変更する必要があります。landlordsattr_accessiblelandlord_attributeslandlords_attributes

于 2013-04-17T03:31:38.377 に答える