Rails 有关 rails 生成的脚手架 `默认约定' 的几个疑惑, 还望高手解答

zw963 · May 22, 2012 · Last by zw963 replied at May 22, 2012 · 3422 hits

所有问题来自于 AWD with rails 第三版,购物车示例:

  1. 在 index 页面,通过 edit_product_path(product) 创建一个链接,这个链接的 href 的格式为什么会知道使用:"/product/1/edit" 的格式,而不是其他格式?

  2. 还是 edit_product_path(product), 通过这个链接,关联到的 erb 文件,是创建了一个表单,可是这个表单是一个使用 PUT方法 的表单,而不是普通 POST方法 的表单?并没有什么地方指定呀?

  3. 下面是 new.html.erb 文件表单中一个按钮的 HTML 源码 <input id="product_submit" name="commit" type="submit" value="Create" /> 点击这个按钮,会调用控制器中的 create方法, 我想知道,这个表单按钮怎么会知道调用 create Action, 而不是其他 Action ?

以上三个问题,到底是在那里做出了约定 ?

Rails RESTful 约定俗成,第三版比较旧,建议楼主看新的资料。

敲一下 rake routes 看看就知道了。

#1 楼 @reducm #2 楼 @Rei #3 楼 @linjunpop

大概了解了,原来这就是所谓的 RESTful. 原来想的,把问题有点复杂化了。

第一个问题是 RESTful, 后面两个是符合 RESTful 约定的路由。我这样理解对吧?

#4 楼 @zw963 Rails 式的 RESTful 路由

Unknow user #6 May 22, 2012

看来楼主对 Restful 完全没有概念,你 put 方法,其实是在 form 里面隐藏了一个 hidden_field 模拟 post 提交的,post 为啥可以找到 create ? 你 resources :xxx,帮你生成了 restful 的 routes

#6 楼 @sharp 都是 POST, 只是 rails 这边会根据 form 传过来的_method, 来判断是 create, update 还是 delete.

#6 楼 @sharp #7 楼 @yedingding

谢啦。你们所说的 隐藏 field 以及 _method 我都了解,之前就是对 RESTful 缺乏系统的理解。

You need to Sign in before reply, if you don't have an account, please Sign up first.