2014-11-22 55 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是不好的做法。所以是的,这是一个不切实际的例子,然而这解释了这一切。