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

zw963 · 2012年05月22日 · 最后由 zw963 回复于 2012年05月22日 · 3427 次阅读

所有问题来自于 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 路由

匿名 #6 2012年05月22日

看来楼主对 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 缺乏系统的理解。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号