Вложенная форма модели не работает должным образом - необходимо точно определить перенаправление POST / GET - PullRequest
0 голосов
/ 29 августа 2011

У меня есть вложенная модель, которая не работает должным образом. ПОСТ находится в нужном месте, но тогда ПОЛУЧИТЬ меня перенаправляет. Поэтому мне интересно, если кто-нибудь может помочь объяснить, что я делаю неправильно.

У меня есть две модели: 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 ', и он все еще был перенаправлен. Так что я вернулся к удивлению, что происходит.

1 Ответ

1 голос
/ 29 августа 2011

Я полагаю, что ваша проблема связана с неотъемлемой проблемой (хотя, возможно, и не проблемой) протокола HTTPВы не можете вернуть перенаправление на запрос POST.Альтернативы включают вызов другого метода из первого действия контроллера или визуализацию правильной страницы непосредственно из этого действия, или некоторое сочетание обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...