我正在使用Ruby on Rails 3,我希望在发布表单时更改其常规行为,以便从signup
操作发布到create
操作而不是{{1}行动。也就是说,我想在我的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| %>
行动。
答案 0 :(得分:0)
问题确实在routers.rb
中。正确的代码是
resources :users do
collection do
get 'signup'
post 'create'
end
resource :profile
end