12

Sto provando a creare una risorsa con un'altra (annidata) allo stesso tempo. Sto usando Rails4 e simple_form 3.0.0rc. Ecco il mio codice.
Modelli:Come dovrei usare i binari e il simple_form per le risorse annidate?

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 

View (modulo per nuovo utente)

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

Quando ho inviato il modulo, creare un'azione recive questo params:

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

E dopo aver chiamato 'user_params' l'unica cosa che rimane è

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

E, come potete vedere, non c'è nulla di 'profilo', in modo verrà creato alcun profilo.
Cosa sto sbagliando?

P.S. mi scusi per il mio inglese.

risposta

14

Uso f.simple_fields_for invece di simple_fields_for:

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

Ouch! Grazie mille @Bigxiang :) –

+0

Questo mi ha letteralmente salvato ore. – Kyle

1

Nel mio caso ho avuto l'oggetto "libro" che appartiene al "tour" e "Tour" has_many "libri".

Nella "BookController" nel metodo "nuovo" Trovo il tour e inizializzare l'oggetto libro:

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

@book = Book.new 

Questa è la forma parziale, per creare un libro: _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 %>