Поведение формы размещения вложенного ресурса - PullRequest
0 голосов
/ 06 июня 2011

Я использую Ruby on Rails 3, и я хотел бы изменить его обычное поведение при публикации формы, чтобы публиковать вместо действия signup действие create вместо действия new. То есть я хотел бы использовать действие signup вместо (обычного) действия new в моем контроллере User и запустить действие create для сохранения данных моей модели, содержащих вложенные ресурсы.

В моем /config/routes.rb файле у меня есть:

resources :users do
  collection do
    get  'signup'
  end

  resource :profile
end

По моему /app/controllers/users_controller.rb у меня

class UsersController < ApplicationController
  def signup
    @signup_user = User.new(params[:user])
    @signup_user.build_profile # NOTE: Nested resource
    ...
  end

  def create
    ...
    @signup_user.save

    respond_to do |format|
      format.html { render :action => :signup } # signup.html.erb
end
  end
end

В моем /app/views/users/signup.html.erb файле у меня есть

<%= form_for @signup_user do |f| %>
  ...
<% end %>

Моя проблема в том, что, если я отправлю вышеупомянутую форму, я буду перенаправлен на действие index пользовательского контроллера, а не на ожидаемое действие create. Оно показывает, что форма сообщения только для действия index.

Как мне решить проблему?


Я пытался использовать следующее

<%= form_for( :user, @signup_user, :url => { :controller => "users", :action => "create" }, :html => { :method => :post } do |f| %>

но у меня все еще есть проблема: я перенаправлен на действие index.

1 Ответ

0 голосов
/ 06 июня 2011

РЕШЕНИЕ

Проблема с швом оказалась в routers.rb. Правильный код был

resources :users do
  collection do
    get  'signup'
    post 'create'
  end

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