12

Ich versuche, eine Ressource mit einer anderen (verschachtelten) zur gleichen Zeit zu erstellen. Ich benutze Rails4 und simple_form 3.0.0rc. Hier ist mein Code. Modelle
:Wie sollte ich rails und simple_form für verschachtelte Ressourcen verwenden?

class User < ActiveRecord::Base 
    has_one :profile 
    accepts_nested_attributes_for :profile 
end 

class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

Controller:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    @user.build_profile 
    end 

    def create 
    user = User.new user_params 
    user.save 
    redirect_to root_url 
# @par =params 
    end 

    private 
    def user_params 
     params.require(:user).permit(:email, profile_attributes: [:name]) 
    end 
end 

Ansicht (Formular für neue Benutzer)

<%= simple_form_for @user do |f| %> 
    <%= f.input :email %> 
    <%= simple_fields_for :profile do |p| %> 
    <%= p.input :name %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 

Wenn ich das Formular erstellen Aktion erhalten speichert diese params:

{"utf8"=>"✓", "authenticity_token"=>"dJAcMcdZnrtTXVIeS2cNBwM+S6dZh7EQEALZx09l8fg=", "user"=>{"email"=>"[email protected]"}, "profile"=>{"name"=>"Vasily"}, "commit"=>"Create User", "action"=>"create", "controller"=>"users"} 

Und nach ‚user_params‘ das einzige, was aufrufen, die

{"email"=>"[email protected]"} 
links ist

Und wie Sie sehen können, gibt es nichts zu ‚Profil‘ ist, so wird kein Profil erstellt werden.
Was mache ich falsch?

P.S. Entschuldigung für mein Englisch.

Antwort

14

Verwenden f.simple_fields_for statt simple_fields_for:

<%= f.simple_fields_for :profile do |p| %> 
    <%= p.input :name %> 
<% end %> 
+0

Autsch! Thx viel @Bigxiang :) –

+0

Das hat mich buchstäblich Stunden gerettet. – Kyle

1

In meinem Fall habe ich das Objekt "Buch" hatte, die "Tour" und "Tour" has_many "Bücher" gehört.

Im "BookController" in der Methode "neue" Ich finde die Tour und initialisieren das Buchobjekt:

@tour = Tour.find(params[:tour_id])

@book = Book.new 

Dies ist das Teilformular ein Buch zu erstellen: _form.html .erb

<%= simple_form_for [@tour, @book] do |f| %> 
    <%= f.input :name, label: "Name"%> 
    <%= f.input :NoReservations, label: "Number of Reservations" %> 
    <%= f.input :email, label: "Email" %> 
    <h3>Num of available places</h3> 
    <%= f.button :submit %> 
<% end %>