Formulario con dos modelos


#1

Buenas,

Utilizo el plugin acts_as_authenticated, con su modelo User. En los
views,
te crea un view para el registro, signup.rhtml, con el siguiente código:

<%= error_messages_for :user %>
<% form_for :user do |f| -%>

Login
<%= f.text_field :login %>

Email
<%= f.text_field :email %>

Password
<%= f.password_field :password %>

Confirm Password
<%= f.password_field :password_confirmation %>

<%= submit_tag 'Sign up' %>

<% end -%>

1º)En mi aplicación, tengo creado otro modelo, llamado UserDetail, donde
irían los datos “personales” del usuario, Dirección, teléfono, etc. Como
hago para insertar estos datos desde el formulario anterior del
signup.rhtml??

2º)Además, tengo hecha la relación 1-1 entre User y UserDetail,con un
campo user_id en UserDetail y las relaciones en User: has_one
:UserDetail y
en UserDetail: belongs_to :User, entonces, al crear un nuevo usuario,
no
debería de crearse un UserDetail?? O se ha de hacer manualmente??

Muchas gracias,

Antonio.


#2

On 7/30/07, Antonio R. removed_email_address@domain.invalid wrote:

Email

1º)En mi aplicación, tengo creado otro modelo, llamado UserDetail, donde
irían los datos “personales” del usuario, Dirección, teléfono, etc. Como
hago para insertar estos datos desde el formulario anterior del
signup.rhtml??

Vista:
<% fields_for :user_detail do |ud| %>
<%= ud.text_field :attribute %>
#etc
<% end %>

Controlador User:
def create
@user = User.create(params[:user])
@user.user_detail.build(params[:ud])

etc

end

2º)Además, tengo hecha la relación 1-1 entre User y UserDetail,con un
campo user_id en UserDetail y las relaciones en User: has_one :UserDetail y
en UserDetail: belongs_to :User, entonces, al crear un nuevo usuario, no
debería de crearse un UserDetail?? O se ha de hacer manualmente??

podes user un trigger en tu clase User del modelo:

before_create :create_details

#etc

protected
def create_details
user_detail = UserDetail.create(#whatever)
end

Igual mi consejo en tu caso seria desnormalizar y poner los UserDetail
dentro de la tabla user, no conozco bien la razon de tu modelo para
realizarlo de esa manera pero a veces usando ActiveRecord es
recomendado desnormalizar. Si no hay una fuerte razon para tener esos
datos aparte va a mejorar la usabilidad y la performance.

Saludos!