Rails [求助] rails 提交表单魔法

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

下面这段代码来自于 Agile 购物车示例的表单。

<p>
  <label for="product_title">Title</label><br />
  <input id="product_title" name="product[title]" size="30" type="text" value="Pragmatic Version Control" />
</p>

现在问题是,我想知道 input 当中的 name=属性:(如下)

name = "product[title]"

为什么采用这种怪怪的格式?我知道有一个同名的哈希用来提交表单的输入内容给 Model, 这跟那个哈希有关系吗?rails 在背后执行了什么魔法操作?

我想,类似的命名提交的表单,rails 会组织成 hash 或 array,至于如何使用得到的 hash 和 array,你甚至可以可以写一个方法来完成自动的类型判断和转换,直接注入 Model 里。

其实这个参数的处理不是 rails 做的,是 rack 干的,rails 中的 Request 继承自 Rack::Request,请求参数的处理在 Rack::Utils 的 parse_nested_query 方法里。

同 2 楼,至于 rails 有没有对 rack 搞扩展,lz 可以去研究下咯

受教了~~ , 谢谢楼上各位,资历尚浅,惭愧,甚至还不知道 rack 是啥玩意儿。

#5 楼 @zw963 rack rake 不一样的

#6 楼 @dotnil

谢谢提醒,就打错了,因为 rake 比较熟,所以常常打成这个。

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