2017-02-09 2 views
0

Ich versuche, Daten in verschiedenen Tabellen mit einem einzigen Formular zu speichern.Ich habe zwei models.ie A und BI versuche, die Attribute von B mit dem Formular A.My A zu speichern Modell:nicht in der Lage, Daten in verschiedenen Tabellen in ror zu speichern

class A < ApplicationRecord 
has_one :B 
accepts_nested_attributes_for :B 
end 

Mein B-Modell ist:

class B < ApplicationRecord 
belongs_to :A 
end 

Mein Ein Controller ist:

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 

mein new.html.erb ist:

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

Ich kann keine Daten in beiden tables.i.e..the Daten speichern, eingegeben wird in einer Tabelle gespeichert, aber nicht in B-Tabelle zu speichern.

+0

bitte meine Antwort überprüfen, es funktioniert oder nicht –

+0

überprüfen Sie bitte diese Repo-Code https://github.com/chaudharyprakash/nested_attributes –

Antwort

0

Ein paar Dinge scheinen falsch:

1) Sie sind nicht richtig starke Parameter verwenden, sollte es

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

2) sein können Sie

entfernen
@a.b.build 

Der Verein und speichern von b-record sollte für sie von schienen auf einmal getan werden.

+0

i params.require geändert haben (a) .permit (Name, Alter, : address,: b_attributes => {: fname,: phone}) aber es gibt einen Fehler, der besagt: Unerreichter Parameter: b – Harshini

+0

vielleicht probiere: b_attributes => [: fname,: phone] –

+0

Ich hatte es versucht, aber es funktioniert nicht . – Harshini

0
The build method signature is different for has_one and 

Die Build-Syntax für has_many Verein:

@a.b.build 

Die Build-Syntax für has_one Verein:

@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 

es funktioniert gut in meinem lokalen Rechner.

+0

danke für die Antwort, aber es funktioniert nicht .. ich bin unerreichten Parameter Fehler .. – Harshini

Verwandte Themen