Forum: Rails-ES Formulario con dos modelos

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Antonio R. (Guest)
on 2007-07-30 13:55
(Received via mailing list)
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| -%>
<p><label for="login">Login</label><br/>
<%= f.text_field :login %></p>

<p><label for="email">Email</label><br/>
<%= f.text_field :email %></p>

<p><label for="password">Password</label><br/>
<%= f.password_field :password %></p>

<p><label for="password_confirmation">Confirm Password</label><br/>
<%= f.password_field :password_confirmation %></p>

<p><%= submit_tag 'Sign up' %></p>
<% 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.
Emilio T. (Guest)
on 2007-07-30 16:25
(Received via mailing list)
On 7/30/07, Antonio R. <removed_email_address@domain.invalid> wrote:
> <p><label for="email">Email</label><br/>
>
> 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!
This topic is locked and can not be replied to.