2012-04-21 56 views
1

是否有任何方法我应该在rails3.2源代码中查看,以便知道渲染调用的导航或url部分在哪里得到解决? 原因是,我有一个小应用程序,其中URL的形式是当你在Rails控制器动作中调用render时,url路径在哪里解决?

www.example.com/bob/edit

因为它表明上述路线呈现编辑form.EDIT :我能够通过修改link_to helper上的响应来获得此路由。

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

的config/routes.rb中

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

,你可以见T这里是在路线什么有趣的事情发生,

在模型

/user.rb

def to_param 
    "#{name}" 
end 
的意见

/edit.html.erb

form_for(@user) do |f| 
end 

观察:这里时,形式是重新渲染,形成'action'指向“users/bob”,但是当表单被重新渲染时,验证错误的形式动作会被mysteriosly更改为“users /”,而且如果我删除了to_param user.rb模型,它工作正常

虽然它不是什么大不了的,我想在那里,如果我需要重写是在渲染调用生成的URL,改变?????

任何建议和指向探索的wecome ....

+0

我猜谢胜利,网址例子应该是:'www.example。com/users/bob' - 你显示了两次相同的网址。 – jdoe 2012-04-21 10:50:26

+0

你可以发布你的'routes.rb'吗? – shime 2012-04-21 10:52:07

+0

似乎您的表单实际上是将更新放入第二个网址。你在使用足智多谋的路线吗?如果是这样,它是一个单一的资源或复数? – Jef 2012-04-21 11:15:56

回答

2

我不知道你是如何得到你要的网址,但一般的回答你的问题会它不” t。发送请求后看到的URL是请求发送给(或重定向到)的URL,而不是来自您的页面的URL,也不是您最终呈现的模板的URL。在你的情况下,我猜问题是你为edit页面创建了一个自定义的URL,但是没有为update创建一个自定义URL,并且你的form_for(@user)发送请求到你的update URL(可能是PUT "https://stackoverflow.com/users/bob")。

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

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

,然后让form_for使用该URL:

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