2014-02-07 57 views
0

我的一個表單有一個奇怪的問題。該表單僅更改該對象的一個​​變量,稱爲admin_comment。它在控制器的顯示方法結束時,在終端:Rails form_for錯誤的方法

Processing by EnrolmentsController#show as

這裏是form_for

<%= form_for enrolment, :url => enrolments_admin_comment_path(enrolment), method: :get, remote: true do |f| %> 

這裏是耙路線

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部件時,它以更新方法結束。 其他與註冊控制器/模型的其他工作正常。有人知道這裏發生了什麼嗎?謝謝!

更新 經過幾乎瘋了,我得到它的工作是這樣的,但只有:作爲方法。

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| %> 

如果我改變方法:後,我收到以下錯誤:

ActionController::RoutingError (No route matches [POST] "/enrolments/28/admin_comment"): 

兩個問題上來: 1。我需要改變什麼才能使用它:post? 2.據我所知,如果我只是陳述控制器和動詞(:get /:post/...),那麼rails會知道在將動詞映射到方法時必須使用哪種方法。但是當我陳述整個路徑(控制器和方法)時,不應該在沒有動詞的情況下知道它需要的一切嗎?無論如何,這個表單參數正在發送。

UPDATE2 好吧,我已經改變了

get "/enrolments/:id/admin_comment" => "enrolments#admin_comment", as: "enrolments_admin_comment" 

post "/enrolments/:id/admin_comment" => "enrolments#admin_comment", as: "enrolments_admin_comment" 

現在一切工作正常。

+1

嗯,是的,如果你使用':get',你就會調用'#show'。這是多麼平靜的資源工作。這裏有什麼問題? –

回答

2

你會最好看Rails' Resource Routing


HTTP動詞

在您的路線創建的每個resources :controller。RB文件創建一系列的路線,其與相對的HTTP連接動詞的:

HTTP Verbs

路由系統的HTTP verbs部分是最重要的,因爲它支配哪個控制器動作被加載。您可以使用不同的HTTP動詞相同的路徑幫手路線完全不同的控制器動作

如果你想創建一個新的路徑,你需要的HTTP動詞設置爲method: :post,像這樣:

<%= form_for enrolment, :url => enrolments_admin_comment_path(enrolment), method: :post, remote: true do |f| %> 

路線

也許你會與此路由結構更好:

resources :courses do 
     resources :enrolments do 
      get :admin_comment, shallow: :true 
     end 
    end 
+0

感謝您的回答。我有:之前的帖子,但我認爲我的路由有問題,所以目前它沒有工作,我認爲這是動詞。 – Linus

+0

現在工作嗎? –

+0

不,我只是測試,我得到一個'ActionController :: RoutingError(沒有路由匹配[POST]「/enrolments/admin_comment.28」):'錯誤。 – Linus