在rails控制器操作中调用render时,url路由在哪里得到解析

时间:2012-04-21 10:32:16

标签: ruby-on-rails ruby routing

我是否应该在rails3.2源代码中查看任何方法,以便知道渲染调用的导航或url部分在哪里得到解决? 原因是,我有一个小应用程序,其中url的格式为

  

www.example.com/bob/edit

上面的路线,因为它建议渲染编辑表单.EDIT:我能够通过修改link_to帮助器上的响应来到达此路由。

def update
  #when validation passes
   redirect_to @user
  #when validation fails
  respond_to do |format|
     format.html {render :action => "edit"}
  end
end

现在的问题是,在提交到users_controller的更新操作时发生验证错误, 网址变为

  

www.example.com/users/bob/edit

配置/ routes.rb中

get "users/new", to: => "users#new"
resources :users

你可以看到路线上没有任何有趣的事情发生,

在models / user.rb

def to_param
  "#{name}"
end

在views / edit.html.erb

form_for(@user) do |f|
end
  

观察:这里重新渲染表单时,表单'action'指向“users / bob”但是当表单重新呈现'cos验证错误时,表单操作mysteriosly更改为“users /”是必需的,如果我删除user.rb模型中的to_param,它可以正常工作

虽然它不是什么大问题,但我想在哪里,如果我需要覆盖渲染调用时生成的url,改变?????

任何有关探索的建议和指示都是我们的....

1 个答案:

答案 0 :(得分:2)

我不确定你是如何得到你得到的网址,但对你的问题的一般答案是它不。您在发送请求后看到的URL是请求发送到(或重定向到)的URL,而不是您来自的页面的URL,也不是您最终呈现的模板的URL。在您的情况下,我猜测问题是您为edit页面创建了自定义网址,但没有为update创建自定义网址,而您的form_for(@user)正在向update发送请求1}}网址(可能是PUT "/users/bob")。

要解决此问题,首先要创建自定义update路由。也许是这样的:

put ":id/update", to: => "users#update"

然后让您的form_for使用该网址:

form_for(@user, :url => "#{@user.to_param}/update")