【问题标题】:Rails render route pathRails 渲染路线路径
【发布时间】:2011-09-23 18:03:47
【问题描述】:

我还是 Rails 的新手,很难理解路径系统在 Rails 中的工作原理。

在我的 routes.rb 中,我为注册创建了一个别名:

match 'signup' => 'user#new'
resource :user, :controller => 'user'

操作在那里,去 /signup 显示正确的操作。到目前为止一切顺利。

现在,当我提交我的注册表单时,它像往常一样使用 POST 运行创建操作。这就是我卡住的地方。

如果注册失败,我想再次向用户展示注册表单。一种选择是进行“新”渲染,但这会将用户带到 /user 而不是 /signup。

用户控制器

class UserController < ApplicationController

  def new
    @user = User.new
  end


  def create

    @user = User.new(params[:user])

    if @user.save
      redirect_to root_url
    else
      render "new"
    end

  end

end

任何帮助表示赞赏!

更新 - 找到解决方案

为 /signup 添加了 2 个匹配路由,使用 :via 选项

match 'signup' => 'user#new', :as => :signup, :via => 'get'
match 'signup' => 'user#create', :as => :signup, :via => 'post'

这样,应用程序知道当发布到 /signup 时它应该运行 create 操作,而当 http 方法是 get 时,它会使用新操作。

控制器标记与上面发布的相同。

【问题讨论】:

    标签: routes ruby-on-rails-3.1


    【解决方案1】:

    尝试像这样将“:as”添加到您的路由中:

    match 'signup' => 'user#new', :as => :signup
    

    然后做

    redirect_to signup_url
    

    在您的控制器中。

    这对我有用。我仍然不知道为什么。也许其他人有解释。

    【讨论】:

    • Hiasinho,感谢您的回答。这将在重定向到注册时起作用。然而,情况是我想保留用户对象,以便预先填写表格。但是,您的回答使我朝着正确的方向前进。我会添加结果。
    猜你喜欢
    • 2015-07-25
    • 2013-01-10
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多