У меня есть процесс регистрации, который идет:
user = User.new
user.email = ...
user.password = ...
user.profile = Profile.new
user.profile.save
user.save
В моем приложении я запускаю процесс регистрации на домашней странице через InfoController
для обработки статических страниц. Поскольку форма на главной странице смешивает модели user
и profile
, я использую вложенную форму модели. Однако, когда я отправляю форму, я перенаправлен не туда. Может кто-нибудь помочь мне понять, что я сделал не так?
Файл Routes.rb:
match '/login' => "sessions#new", :as => "login"
match '/signup' => 'profiles#new', :as => "signup"
match 'skip/signup', :to => 'info#signupskip'
match 'skip/profiles/new', :to => 'profiles#newskip'
root :to => 'info#home'
root :to => "questions#index"
resources :users
resources :profiles
resources :info
resource :session
resources :session
ProfilesController:
class ProfilesController < ApplicationController
before_filter :authenticate
def new
@profile = Profile.new
end
def name
puts "#{user.profile.first_name} #{user.profile.last_name}"
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
...
UsersController:
class UsersController < ApplicationController
before_filter :authenticate, :only => [:edit, :update]
def new
@user = User.new
end
def index
@user = User.all
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to profile_path, :notice => 'User successfully added.'
else
render :action => 'new'
end
end
И, наконец, форма с вложенными моделями:
<%= form_for(:profile, :url => 'signup', :html => {:id => 'homepage'}) do |f| %>
<p class="hometext">I'm </p>
<div>
<%= f.label :first_name, :placeholder => 'First name' %>
<%= f.text_field :first_name, :size=> 8, :id => "profile[first_name]" %>
</div>
<div>
<label for="profile[last_name]">Last name</label>
<%= f.text_field :last_name, :size=> 8, :id => "profile[last_name]" %>
</div>
<%= f.fields_for :user do |f| %>
<p class="hometext">. My email is
<div>
<label for="user[email]">Email</label>
<%= f.text_field :email, :size=> 13, :id => "user[email]" %>
</div>
<% end %>
<p class="hometext">. I want to </p>
<div>
<label for="user[goal]">ex: be President</label>
<%= f.text_field :goal, :size=> 13, :id => "user[goal]" %>
</div>
<p class="hometext">when I grow up. </p>
<div id="button">
<%= submit_tag 'Join', :class => 'button orange' %>
</div>
<% end %>