2017-02-09 15 views
0

1つのフォームを使用して異なるテーブルにデータを保存しようとしています.2つのモデルがあります。AとBIはAフォームを使用してBの属性を保存しようとしています。モデルは次のとおりです。rorの異なるテーブルにデータを保存できません

class A < ApplicationRecord 
has_one :B 
accepts_nested_attributes_for :B 
end 

マイBモデルは次のとおりです。

class B < ApplicationRecord 
belongs_to :A 
end 

マイAコントローラは次のとおりです。

class AController < ApplicationController 

def index 
    @a = A.all 

end 

def new 
    @a = A.new 
end 

def create 
    @a = A.new(a_params) 
    @a.b.build 
    if @a.save 
     redirect_to a_path 
    else 
     render 'new' 
    end 
end 

private 

def a_params 
    params.require(:a).permit(:name, :age, :address :b => [:fname, :phone]) 
end 
end 

私new.html.erbです:

<%= form_for(:a, url: a_path) do |f| %> 
<div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name%> 
</div> 
<div class="field"> 
    <%= f.label :age %> 
    <%= f.text_field :age%> 
</div> 
<div class="field"> 
    <%= f.label :address %> 
    <%= f.text_field :address%> 
</div> 

<%= f.fields_for :b do |f| %> 
<p> 
<%= f.label :fname, "father name" %><br /> 
<%= f.text_field :fname %> 
    </p> 
     <p> 
     <%= f.label :phone, "phone" %><br /> 
    <%= f.text_field :phone %> 
    </p> 
    <% end %> 
<div class="actions"> 
    <%= f.submit %> 
</div> 

私はテーブルに格納されている入力の両方tables.i.e..theデータにデータを格納することができませんが、Bテーブルに格納することができませんでした。

+0

私の答えを確認してください、それは動作しているかどうか –

+0

このレポコードを確認してください。https://github.com/chaudharyprakash/nested_attributes –

答えて

0

物事のカップルは間違っているようです:あなたは正しく、強力なパラメータを使用していない

1)、

params.require(:a).permit(:name, :age, :address, :b_attributes => [:fname, :phone]) 

2)あなたは

@a.b.build 

関連付けを削除することができ、それがあるべき一度にレールであなたのためにbレコードを保存しなければなりません。

+0

私はparams.require(:a).permit(:name、 :アドレス、:b_attributes => {:fname、:電話})。しかし、次のようなエラーがあります:許容されないパラメータ:b – Harshini

+0

おそらく試してください:b_attributes => [:fname、:phone] –

+0

私は試みました。 。 – Harshini

0
The build method signature is different for has_one and 

にhas_many関連のビルド構文:

@a.b.build 

has_oneの関連付けのためのビルド構文:

@a.build_b # this will work 

@a.b.build # this will throw error 




class AController < ApplicationController 

    def index 
     @a = A.all 

    end 

    def new 
     @a = A.new 
    end 

    def create 
     @a = A.create(a_params) 
     @a.build_b 
     if @a.save 

      redirect_to a_path 
     else 
      render 'new' 
     end 
    end 

    private 

    def a_params 
     params.require(:a).permit(:name, :age, :address, :b_attributes => [:fname, :phone]) 
    end 
end 

それは私のローカルマシンで正常に動作しています。

+0

返信ありがとうございますが、それは動作していません..私は許容されていないパラメータエラーに直面しています.. – Harshini

関連する問題