Из других публикаций на SO я узнал, что мой процесс регистрации с использованием формы вложенной модели имеет недостатки: я создаю новый User
, а затем перенаправляю его на создание Profile
. Вот процесс:
user = User.new
user.email = ...
user.password = ...
user.profile = Profile.new
user.profile.first_name = ...
...
user.profile.save
user.save
Похоже, что одним из решений является инициирование метода профиля из действия UsersController
create (?), Чтобы я POST для обеих моделей (?) Затем перенаправлял на страницу с формой для заполнения остальных профиля.
Но я не совсем уверен, как это сделать, так как я новичок в программировании / Rails. Так может ли кто-нибудь дать мне руководство о том, как ввести метод Profile
в UsersController
? Я попробовал, но не думаю, что это правильно. Код для обоих пользователей / ProfilesController ниже:
Пользователь:
def new
@user = User.new
@user.profile = Profile.new
end
def index
@user = User.all
end
def create
@user = User.new(params[:user])
if @user.profile.save
redirect_to profile_new_path, :notice => 'User successfully added.'
else
render :action => 'new'
end
end
Профиль:
def new
@user.profile = Profile.new
end
def create
@profile = Profile.new(params[:profile])
if @profile.save
redirect_to profile_path, :notice => 'User successfully added.'
else
render :action => 'new'
end
end
routes.rb:
match '/signup' => 'profiles#new', :as => "signup"
get "signup" => "profiles#new", :as => "signup"
root :to => 'users#new'
resources :users
resources :profiles
Форма моей вложенной модели (соответствующие части):
<%= form_for(:user, :url => { :action => :create }, :html => {:id => 'homepage'}) do |f| %>
<%= f.text_field :email, :size=> 13, :id => "user[email]" %>
<%= f.fields_for :profile do |f| %>
<% end%>
<% end %>
Если бы кто-нибудь мог мне помочь, я был бы очень признателен.