2016-04-13 11 views
0

Ich möchte Daten für 2 verschiedene Modelle schreiben, die miteinander wie folgt verbunden sind:Wie mache ich ein Formular für zwei verwandte Modelle?

class Post < ActiveRecord::Base 
    has_many :roads 
    accepts_nested_attributes_for :roads, :allow_destroy => true 
end 

class Road < ActiveRecord::Base 
    belongs_to :post 
end 

Natürlich de Straßen Tisch hat eine „post_id Spalte“. Mein form_for in der Zeit nach Ansicht wie folgt aussieht

<%= form_for @post do |f| %> 

    <div class="form-group"> 
    <%= f.label :Tu_Nombre %> 
    <%= f.text_field :creador, class: "form-control" %> 
    </div> 


    <div class="form-group"> 
    <%= f.label :año %> (Cuando fue tu experiencia?) 
    <%= f.text_field :año, class: "form-control" %> 
    </div> 

    <div class="form-group"> 
    <%= fields_for :roads do |r| %> 
     <%= r.label :principio %> (desde?) 
     <%= r.text_field :principio, class: "form-control" %> 

     <%= r.label :final %> (hasta?) 
     <%= r.text_field :final, class: "form-control" %> 
    <% end %> 
    </div> 

    <div class="form-group"> 
    <%= f.label :historia %> (Cuentanos la historia de tu viaje!) 
    <%= f.text_area :historia, class: "form-control", size: "50x15" %> 
    </div> 

    <div> 
    <%= f.submit class: "btn btn-success" %> 
    </div> 

<% end %> 

Schließlich mein posts_controller Methode

def create 
@post = Post.new(post_params) 

    if @post.save 
    redirect_to @post, notice: 'Post was successfully created.' 
    else 
    render :new 
    end 
end 

mit dem privaten

def post_params 
    params.require(:post).permit(:historia, roads_attributes: [:pricipio, :final, :post_id]) 
end 

Der Beitrag erstellen eingereicht wird, wenn ich überprüfen Sie die Konsole alle Attribute für Post wurde gespeichert, aber die für Straße, hat nicht. Wie kann ich nur ein Formular zwei make-Datensätze für diese beiden Modelle verwenden und dass die Post-ID registriert wird, damit ich die Tabellen beziehen kann?

Vielen Dank !!

Antwort

0

Aktualisieren Sie Ihre posts_controller new Methode zu enthalten .build

def new 
    @post = Post.new 
    @post.roads.build 
end 
+0

Fast .. es für mich gearbeitet mit @ post.roads.build ... –

0

Bitte lesen Sie die Nested Forms im Form Helpers Kapitel des Rails Guide. Sie könnten fields_for verwenden, um das geschachtelte Attributformular für Ihre roads zu erstellen und verschachtelte Attribute wie das Beispiel zuzulassen. Unten ist ein Beispiel von Schienenführer, Sie könnten versuchen, es selbst herauszufinden.

_form.html.erb

<%= form_for @person do |f| %> 
    Addresses: 
    <ul> 
    <%= f.fields_for :addresses do |addresses_form| %> 
     <li> 
     <%= addresses_form.label :kind %> 
     <%= addresses_form.text_field :kind %> 

     <%= addresses_form.label :street %> 
     <%= addresses_form.text_field :street %> 
     ... 
     </li> 
    <% end %> 
    </ul> 
<% end %> 

erlaubt verschachtelte Attribute in people_controller.rb

def person_params 
    params.require(:person).permit(:name, addresses_attributes: [:id, :kind, :street]) 
end 
+0

Hey Danke, es war die Lösung, ich war das @ post.roads.build im posts_controller fehlt –

0

Bringen Sie Ihre fields_for an den übergeordneten Formular-Builder wie folgt:

<%= f.fields_for :roads do |r| %> 
Verwandte Themen