2011-10-13 21 views
5

Estoy creando una relación uno a uno con el usuario llamada user_info. A continuación se muestra la solución de trabajo.Rieles 3: idear con has_one, Anidados atributos no actualizados

En 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 

En user_info.rb

belongs_to :user 
attr_accessible :first_name, :last_name 

En legado/registros/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 %> 

entiendo que no debería incluir la construcción en la vista. Pero no quiero "tocar" el controlador o modelo de diseño. Esta es la manera más fácil.

+0

Resulta que la línea de acumulación no está funcionando adecuadamente. ¿Debería ser '<% resource.build_user_info if resource.user_info.nil? %> ' –

Respuesta

3

Resulta que la línea de construcción no está funcionando correctamente en la vista.

debe ser: <% resource.build_user_info if resource.user_info.nil? %>

1

Trate :autosave => true en su llamada a accepts_nested_attributes_for

+0

Debe agregarse a' has_one: user_info,: autosave => true' en lugar de 'accepts_nested attributes_for'. Sin embargo, esto todavía no funciona. No guarda primer nombre. –

+0

Hmm, vale, ¿por qué no agregarías la información al modelo de usuario existente? Esa sería la forma más sencilla de hacerlo. – janders223

+2

No es un buen modelo para hacer un modelo de usuario grande. Típicamente el modelo de usuario incluye mucha información secundaria como sitio web, dirección, sobre mí, pasatiempos, etc. etc. Ponerlo en el mismo modelo significa que cada vez que solo necesita extraer la lista de usuarios o cualquier operación de autenticación, debe extraer todo más. Es una práctica común y buena para dividir en 2 modelos con una relación de uno a uno. –

Cuestiones relacionadas