Form_tag'创建' vs' / create'

时间:2014-11-22 14:53:11

标签: ruby-on-rails

我正在探索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)。

有谁知道我为什么会收到此错误?

1 个答案:

答案 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_pathroot_urlPrefix提示)路由路径' /'进入ApplicationController,行动index。如果我在同一条路径上接受了一些POST(上面的表格中我说的不是),我会写这个:

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

PS:将任何内容路由到ApplicationController都是不好的做法。所以,是的,这是一个不切实际的例子,但它解释了这一切的全部内容。