2017-02-09 12 views
0

Я пытаюсь сохранить данные в разных таблицах с помощью одной формы. У меня есть две модели. А и я пытаюсь сохранить атрибуты B с помощью формы A.My A модель:не удалось сохранить данные в разных таблицах в ror

class A < ApplicationRecord 
has_one :B 
accepts_nested_attributes_for :B 
end 

Моя B модель:

class B < ApplicationRecord 
belongs_to :A 
end 

Мой контроллер А:

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,: age, : address:: b_attributes => {: fname,: phone}), но есть ошибка: параметр unpermitted: 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