2014-11-22 84 views
0

我正在探索form_tag的所有選項,我注意到如果我使用form_tag(action:'create')它會發布'創建'。Form_tag'創建'vs'/創建'

但是,如果我用form_tag('/create')form_tag('create')我得到這個錯誤在瀏覽器\

No route matches [POST] "/create" 

我只是從Rails文檔中給出上的form_tag的例子推斷使用「/創建」(http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag)。

有誰知道我爲什麼會得到這個錯誤?

回答

1

form_tag需要任何必要條件來找到發送數據的路徑。

action: 'create',其被解析爲{action: 'create'},一個Hash,調用路由系統(具有規則routes.rb定義)來找到在同一個控制器的路徑(當前視圖是在)爲create動作。

否則,它更常用於路徑幫助程序,將路徑作爲字符串返回。當您手動指定字符串時,它將直接用作路徑。大多數時間這是不是你想要的。所有路徑助手都可以通過調用rake routes找到。對於一個最基本的應用程序,我扔在一起的測試,這是我所得到的:

Prefix Verb URI Pattern Controller#Action 
    root GET/   application#index 

這意味着你有方法root_pathroot_urlPrefix提示)的路由路徑「/」爲ApplicationController,行動index。如果我有什麼接受同一路徑上的POST(上表說我沒有),我會寫這樣的:

form_tag(root_path) # parentheses are optional, it's Ruby! 

PS:路由什麼ApplicationController是不好的做法。所以是的,這是一個不切實際的例子,然而這解釋了這一切。