У меня есть вложенная модель, которая не работает должным образом. ПОСТ находится в нужном месте, но тогда ПОЛУЧИТЬ меня перенаправляет. Поэтому мне интересно, если кто-нибудь может помочь объяснить, что я делаю неправильно.
У меня есть две модели: User
и Profile
. Код для них ниже:
Пользователь:
class User < ActiveRecord::Base
attr_accessor :password, :email
has_one :profile, :dependent => :destroy
accepts_nested_attributes_for :profile
...
end
Профиль:
class Profile < ActiveRecord::Base
attr_accessible :first_name, :last_name, etc.
belongs_to :user
accepts_nested_attributes_for :user
...
end
Новое / Создать из обеих моделей:
class UsersController < ApplicationController
def new
@user = User.new
if logged_in?
redirect_to current_user.profile
end
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to signup_path, :notice => 'User successfully added.'
else
render :action => 'new'
end
end
class ProfilesController < ApplicationController
def new
@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
def index
@profile = current_user.profile
end
Моя регистрация (двухэтапный процесс) смешивает модели, поэтому, как я сказал, я использую вложенную форму модели в своем файле Users new.html.erb
. Код form_for
и f.fields_for
ниже:
<%= form_for(:user, :url => signup_path, :html => {:id => 'homepage'}) do |f| %>
<%= f.fields_for :profile do |f| %>
Теперь, когда я ввожу данные в форму, мой файл rout.rb кажется POST в нужное место (/signup
, поэтому профиль можно заполнять дальше), но GET направляет меня к /login
.
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 => 'users#new'
resources :users
resources :profiles
В rails server
:
Started POST "/signup" for 127.0.0.1 at Sun Aug 28 19:54:11 -0400 2011
Processing by ProfilesController#new as HTML
Started GET "/login" for 127.0.0.1 at Sun Aug 28 19:54:11 -0400 2011
Processing by SessionsController#new as HTML
Rendered sessions/new.html.erb within layouts/application (32.1ms)
Мне интересно, проблема в моем файле layouts/application
, а именно в этом коде:
<% if logged_in? %>
<%= render 'layouts/header_in' %>
<% else %>
<%= render 'layouts/header_out' %>
<% end %>
Может кто-нибудь помочь мне объяснить, что я делаю не так?
UPDATE:
Я удалил аргумент if / else в `layouts / application ', и он все еще был перенаправлен. Так что я вернулся к удивлению, что происходит.