2017-07-04 9 views
0

には、多くの場合、Servicepointsがあり、Servicepointには多くがあります。Addressesです。 Servicepointaccepts_nested_attributes_for :addressesに設定されているので、サービスポイントを作成して同時にアドレスを作成することができます。トリプルネストされたモデルが正しく構築されていない

私の問題は、Servicepointにリンクされるアドレスを作成する方法と、ServicepointとをOrganismeにリンクさせる方法を理解できないことです。私はServicepointshowビュー内にOrganismeのビューを作成しています。

ビュー:

<%= form_for([@organisme, @organisme.servicepoints.build]) do |f| %> 
    <p> 
    <%= f.label :nom %><br> 
    <%= f.text_field :nom %> 
    </p> 
    <p> 
    <%= f.label :fax %><br> 
    <%= f.text_field :fax %> 
    </p> 
    <p> 
    <%= f.label :courriel %><br> 
    <%= f.email_field :courriel %> 
    </p> 
    <p> 
    <%= f.label :telephone %><br> 
    <%= f.text_field :telephone %> 
    </p> 
    <%= f.fields_for :addresses do |address_attributes| %> 
    <p> 
     <%= address_attributes.label :no_civique %><br> 
     <%= address_attributes.text_field :no_civique %><br> 

     <%= address_attributes.label :rue %><br> 
     <%= address_attributes.text_field :rue %><br> 

     <%= address_attributes.label :ville %><br> 
     <%= address_attributes.text_field :ville %><br> 

     <%= address_attributes.label :province %><br> 
     <%= address_attributes.text_field :province %><br> 

     <%= address_attributes.label :etat %><br> 
     <%= address_attributes.text_field :etat %><br> 

     <%= address_attributes.label :code_postal %><br> 
     <%= address_attributes.text_field :code_postal %><br> 
    </p> 
<% end %> 
    <p> 
    <%= f.submit :Ajouter, class: 'btn btn-info' %> 
    </p> 
<% end %> 

コントローラー:

organisme /表示し

def show 
@organisme = Organisme.find(params[:id]) 
end 

のServicePoint /作成

def create 

    @organisme = Organisme.find(params[:organisme_id]) 

    @servicepoint = @organisme.servicepoints.create(servicepoint_params) 

    redirect_to organisme_path(@organisme) 

end 

private 
    def servicepoint_params 
    params.require(:servicepoint).permit(:nom, :fax, :courriel, :telephone, addresses_attributes: [:id, :no_civique, :rue, :ville, :province, :etat, :code_postal]) 
end 

経路:

resources :organismes do 
    member { patch :activate } 
    member { patch :deactivate } 
    resources :addresses 
    resources :servicepoints do 
    resources :addresses 
    end 
end 

今私の問題は、Address入力情報が表示されていないことです。私は@servicepoint変数を持っていて、それを使ってすべてを作成しようとしましたが、その問題はOrganismeにリンクできませんでした。

これ以上の情報が必要な場合は、何か追加していただきたいと思います。

モデル:あなたがのServicePointを構築する形で

class Organisme < ApplicationRecord 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 
    has_many :servicepoints 
end 

class Servicepoint < ApplicationRecord 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 
    belongs_to :organisme 
end 

class Address < ApplicationRecord 
    belongs_to :organismereferent, optional: true 
    belongs_to :organisme, optional: true 
    belongs_to :servicepoint, optional: true 
end 
+0

*住所入力情報も表示されていないが*あなたがアドレスをフォームの属性を参照することができない意味ですか? – Pavan

+0

有機体を見ると、フォームのアドレス部分が見えないと言っていますか? – Syl

+0

@Pavan Ya私の見解では、ラベルとtext_fieldsは見えません。 – CNuts

答えて

1

私はコントローラのアクションですべて建設する:

<%= form_for([@organisme, @servicepoint]) do |f| %> 
... 


def show 
    @organisme = Organisme.find(params[:organisme_id]) 
    @servicepoint = @organisme.servicepoints.build 
    @servicepoint.addressess.build 
end 
+0

これはフォームを作成目的でのみ使用し、複数のアドレスを作成する可能性がない場合は、問題を解決する最も直接的な方法です。これが作成サービスポイントとして使用され、後で別のフォームから編集してより多くのアドレスを追加することができるのは、非常に便利です。 – Syl

+0

これは本当にありがとうございます:D – CNuts

+0

@Syl情報をありがとうございます。そして、はい、新しいサービスポイントを作成するときに1つのアドレスだけを追加できるようにしたかったのです。 – CNuts

0

は、その空のserviceformは、空のフォームとして示されています。反復するアドレスがないため、アドレスは表示されません。あなたも住所を作る必要があります。

フォーム自体にビルドされているため、フォームではサービスポイントを編集できないことに注意してください。また、フォームに複数のサービスポイントが表示されるようにするには、サービスポイントをどこかで反復する必要があります。

+0

私はちょっと分かりましたが、私は住所を作る方法を見つけることができません。 – CNuts

関連する問題