【问题标题】:Form behavior posting nested resource表单行为发布嵌套资源
【发布时间】:2011-06-06 01:16:23
【问题描述】:

我正在使用 Ruby on Rails 3,我想更改它在发布表单时的常规行为,以便从 signup 操作发布到 create 操作,而不是从 new 操作发布。也就是说,我想在我的User 控制器中使用signup 操作而不是(常规)new 操作并触发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 操作。

【问题讨论】:

    标签: ruby ruby-on-rails-3 forms post redirect


    【解决方案1】:

    解决方案

    问题确实在routers.rb 中。正确的代码是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多