2011-10-13 15 views
5

Sto creando una relazione uno a uno con l'utente chiamata user_info. Di seguito è la soluzione di lavoro.Rails 3: idea con has_one, attributi nidificati non aggiornati

In user.rb

has_one :user_info 
accepts_nested_attributes_for :user_info, :allow_destroy => true 
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :user_info_attributes 

In user_info.rb

belongs_to :user 
attr_accessible :first_name, :last_name 

A disposizione testamentaria/iscrizioni/edit.html.erb

<% resource.build_user_info if resource.user_info.nil? %> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    ... 
    <%= f.fields_for :user_info do |info| %> 
     <%= info.text_field :first_name %> 

ho capito che non avrei dovuto includere la build nella vista. Ma non voglio "toccare" il controller o il modello di dispositivo. Questo è il modo più semplice.

+0

scopre che la linea di accumulo non funziona correttamente. Dovrebbe essere <% resource.build_user_info se resource.user_info.nil? %> ' –

risposta

3

scopre che la linea di accumulo non funziona correttamente nella visualizzazione.

dovrebbe essere: <% resource.build_user_info if resource.user_info.nil? %>

1

Prova :autosave => true sulla vostra chiamata a accepts_nested_attributes_for

+0

Dovrebbe essere aggiunto a' has_one: user_info,: autosave => true' invece di 'accept_nested attributes_for'. Tuttavia, questo ancora non funziona. Non salva first_name. –

+0

Hmm, ok, perché non dovresti aggiungere le informazioni al modello utente esistente? Quello sarebbe il modo più semplice per farlo. – janders223

+2

Non è un buon modello fare un grande modello utente. In genere il modello utente include molte informazioni secondarie come sito web, indirizzo, su di me, hobby, ecc. Inserirlo nello stesso modello significa che ogni volta che devi solo estrarre un elenco di utenti o qualsiasi operazione per l'autenticazione, devi tirare tutto altro. È prassi comune e buona dividere in 2 modelli con una relazione uno a uno. –

Problemi correlati