【发布时间】:2014-02-07 09:41:52
【问题描述】:
我的一个表单有一个奇怪的问题。该表单仅更改对象的一个变量,称为 admin_comment。它以控制器的 show 方法结束,在终端中:
Processing by EnrolmentsController#show as
这里是form_for
<%= form_for enrolment, :url => enrolments_admin_comment_path(enrolment), method: :get, remote: true do |f| %>
这里是 rake 路线
enrolments_admin_comment GET /enrolments/admin_comment(.:format) enrolments#admin_comment
还有 routes.rb 部分
get "enrolments/admin_comment"
resources :courses do
resources :enrolments
end
当我从 form_for 中删除 method: :get 部分时,它会以更新方法结束。
注册控制器/模型的其他一切工作正常。有人知道这里发生了什么吗?谢谢!
更新 在几乎发疯之后,我让它像这样工作,但只能使用 :get 作为方法。
routes.rb
get "/enrolments/:id/admin_comment" => "enrolments#admin_comment", as: "enrolments_admin_comment"
form_for
<%= form_for enrolment, :url => enrolments_admin_comment_path(enrolment), method: :get, remote: true do |f| %>
如果我将方法更改为 :post,我会收到以下错误:
ActionController::RoutingError (No route matches [POST] "/enrolments/28/admin_comment"):
提出了两个问题: 1.我必须改变什么才能使它与 :post 一起工作? 2. 据我了解,如果我只是说明控制器和动词(:get / :post / ...),rails 会知道它必须使用哪种方法,因为动词被映射到方法。但是当我陈述整个路径(控制器和方法)时,如果没有动词,rails 不应该知道它需要的一切吗?无论如何,表单参数正在发送。
更新2 好的,我变了
get "/enrolments/:id/admin_comment" => "enrolments#admin_comment", as: "enrolments_admin_comment"
到
post "/enrolments/:id/admin_comment" => "enrolments#admin_comment", as: "enrolments_admin_comment"
现在一切正常。
【问题讨论】:
-
嗯,是的,如果您使用
:get,您将调用#show。这就是宁静资源的工作方式。这里有什么问题?
标签: ruby-on-rails controller form-for