我正在探索form_tag的所有选项,我注意到如果我使用form_tag(action:'create')
,它会发布'创建'。
但是,如果我使用form_tag('/create')
或form_tag('create')
,我会在浏览器中收到此错误\
No route matches [POST] "/create"
我只是从form_tag上Rails文档中给出的示例中推断出使用' / create' (http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag)。
有谁知道我为什么会收到此错误?
答案 0 :(得分:1)
form_tag
需要找到发送数据的路径所需的一切。
action: 'create'
已解析为{action: 'create'}
,Hash
,调用路由系统(使用routes.rb
中定义的规则)在同一控制器中查找路由( create
动作的当前视图。
否则,它更常用于路径助手,将路径作为字符串返回。手动指定字符串时,它将直接用作路径。大多数情况下,不是您想要的。可以通过调用rake routes
找到所有路径助手。对于一个简单的应用程序我扔在一起进行测试这是我得到的:
Prefix Verb URI Pattern Controller#Action
root GET / application#index
这意味着您有方法root_path
和root_url
(Prefix
提示)路由路径' /'进入ApplicationController
,行动index
。如果我在同一条路径上接受了一些POST(上面的表格中我说的不是),我会写这个:
form_tag(root_path) # parentheses are optional, it's Ruby!
PS:将任何内容路由到ApplicationController
都是不好的做法。所以,是的,这是一个不切实际的例子,但它解释了这一切的全部内容。