Rails:为什么在调用`render'new'`时自定义url会改变?

时间:2011-02-08 12:04:58

标签: ruby-on-rails ruby-on-rails-3 controller url-routing

我有一个控制器,用于控制联系页面上的联系我们表单。在routes.rb文件中,我有一行match '/contact', :to => 'feedback#new'。现在当表格填写正确时,一切正常;网址是'/ contact'。但是,如果表单填写不正确,我的控制器renders 'new'和网址会从'/contact'更改为'/feedback'。有人可以告诉我为什么会发生这种情况以及如何解决这个问题,以便在触发验证并呈现页面时,网址仍为/contact而不是/feedback?谢谢!

我的控制器代码: enter image description here

2 个答案:

答案 0 :(得分:9)

match '/contact', :to => 'feedback#new'

该路线只会将/contactFeedbackController#new匹配。

您需要添加以将“发布”部分与FeedbackController#create

相匹配
match '/contact', :to => 'feedback#create', :via => :post, :as => :post_contact
# change :as => to whatever path for this you'd like to use, ex :as => :create_contact

您的表单现在将更改为

= form_for(@feedback), :url => post_contact_path do |f|

只需使用默认form_for即可尝试从resources中的routes.rb创建路径。并且,我假设该路由是resources :feedback,这当然会创建看起来像/feedback的路线。

答案 1 :(得分:2)

在您的routes.rb中使用

而不是使用/contact匹配器:

resources :contact, :as => :feedback, :controller => :feedback, :only => [:new, :create]

http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes