2013-07-07 4 views
9

Assumendo un modello utente utilizzando Rails4 con parametri_forte.I parametri forti per gli attributi nidificati restituiscono "parametri non ammessi" quando l'array vuoto è

class User < ActiveRecord::Base 
    has_secure_password 

accepts_nested_attributes_for :identity 

// rest of code omitted for brevity 
end 

Se mi riferisco alla guida dovrei essere in grado di fare

def user_params 
    params.require(:user).permit(:email, identity_attributes: []) 
end 

per consentire mass_assignment di ogni identity_attributes qualunque sia la loro nomi o numeri. Ma questo percorso in un "parametri non consentito: identity_attributes"

Ma se a specificare le identity_attributes funziona

def user_params 
    params.require(:user).permit(:email, identity_attributes: [:last_name, :first_name]) 
end 

Ho molti attributi in Identità, sarei in grado di mass_assign loro attraverso l'utente senza specificare tutti loro.

Mi manca qualcosa? E 'un errore ?

Acclamazioni

risposta

21

Devi specificare gli attributi della propria identità che si desidera aggiornati, tra cui la: id dell'entità identità.

si avrà qualcosa di simile:

def user_params 
    params.require(:user).permit(:email, identity_attributes: [:id, :last_name, :first_name]) 
end 

se non si specifica il: id, Rails cercheranno di creare un'entità invece di aggiornarlo. Passo tutto il week-end a lottare su una semplice relazione uno-a-molti usando accept_nested_attributes_for perché non ho specificato l'id negli attributi consentiti.

+0

Grazie è giusto quando si ha una relazione uno-a-molti (e sembra logico specificare quale oggetto nella "parte multipla" dovrebbe essere aggiornato) ma sembra non essere il caso di un 1 a 1 relazione (Funziona bene senza specificare l'identità.id). La domanda riguardava l'esempio fornito in documenti in cui gli attributi nidificati sono un array vuoto^_^(e non funziona per quanto posso vedere) – phron

+0

Ripetizione OOps questa mattina, hai ragione anche per un 1-to -1 relazione ... Se l'ID oggetto nidificato non viene fornito sembra eliminare il record originale e ricreane uno nuovo invece di aggiornare quello esistente (!!). I documenti non sono molto chiari quando strong_parameters e nested_attributes !!! Swingave swing Cheers – phron

+0

@ d34n5 sei fantastico :). Ma mi stavo chiedendo perché i mongolo mancassero di questa cosa importante nella loro documentazione. –