Witam serdecznie,
niedawno miałem podobny problem (http://rubyonrails.pl/forum/t2940-automatyczne-dodawanie-do-tabeli-id-u�ytkownika) jednak ten jest trochę inny dlatego zakładam nowy wątek (poprzedni wątek w połowie mi jedynie pomógł).
Otóż mam sobię dwie tabelki w bazie (co za tym idzie dwa modele):
- users
- user_details
mam formularz rejestracji konta:
[code]<% form_for @user, :url => account_path do |f| %>
<%= f.error_messages %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password, form.object.new_record? ? nil : “Change password” %>
<%= f.password_field :password %>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
<% f.fields_for :user_details do |details_form| %>
<%= details_form.label :name %>
<%= details_form.text_field :name %>
<%= details_form.label :surname %>
<%= details_form.text_field :surname %>
<% end %>
<%= f.submit “Register” %>
<% end %>[/code]
jak widać wyświetlone zostały ze sobą pola z dwóch modeli.
Wszystko fajnie, idziemy dalej.
Mam także metodę create w kontrolerze UsersController:
[code] def create
@user = User.new(params[:user])
@user_details = UserDetails.new(params[:user][:user_details])
if @user.save && @user_details.save
@user.deliver_user_verification_instructions!
flash[:notice] = "Registration verification email sent.Please verify your account!"
redirect_back_or_default account_url
else
render :action => :new
end
end[/code]
prawie wszystko działa. No właśnie prawie robi dużą różnicę
Otóż czego nie mogę osiągnąć:
- ten zapis:
[code]@user = User.new(params[:user])
@user_details = UserDetails.new(params[:user][:user_details])
if @user.save && @user_details.save[/code]
wydaje mi się błędny, gdyż nie zapisuje id z modelu User do user_id w modelu UserDetails, ponadto nie podoba mi się, że muszę robić
dwie czynności @user.save i @user_details.save - chciałbym zrobić tak by było tylko @user.save, tym samym dwie linijki wyzej przydało by się zoptymalizować pod tym kątem. I na tym poległem - czy istnieje możliwość krótszego, bardziej zoptymalizowanego oraz eleganckiego zapisu?
- Drugi mój problem jest taki iż w <%= f.error_messages %> dostaje errory tylko z modelu User moje pytanie brzmi jak może z merge’ować błędy, które dostaje od authlogica (bo z niego korzystam) z błędami dot. nowych pól?
Będę wdzięczny za pomoc.
Pozdrawiam