1

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

www.example.com/bob/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 的更新操作时发生验证错误时,url 变为

www.example.com/users/bob/edit

配置/路由.rb

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

如您所见,路线中没有发生任何有趣的事情,

在模型/user.rb

def to_param
  "#{name}"
end

在意见/edit.html.erb

form_for(@user) do |f|
end

观察:在这里,当重新呈现表单时,表单“action”指向“users/bob”,但是当表单重新呈现“验证错误的 cos”时,表单操作神秘地变为“users/”,这很奇怪,如果我删除 user.rb 模型中的 to_param 它工作正常

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

欢迎任何建议和探索的指针......

4

1 回答 1

2

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

要解决这个问题,第一件事是创建您的自定义update路线。也许是这样的:

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

然后让您form_for使用该 URL:

form_for(@user, :url => "#{@user.to_param}/update")
于 2012-04-21T13:47:21.617 回答