form_for的神奇
new和eedit的模板几乎一模一样,表单的形式都是很简单的:
<% form_for(@contact) do |f| %>
可是一个POST动作,一个PUT动作,结果就是一个导向到create方法,一个导向到update方法。查看源文件可以看到edit的模板生成的代码多了一个隐藏控件:
<input name="_method" type="hidden" value="put" />
这其中Rails一定有什么隐藏的处理。google之后发现了这一篇文章:
http://www.javaeye.com/problems/19749
原来有人跟我有完全一样的疑惑,区别是人家查看了源代码,而我懒,没有看:)。
原来form_for在生成代码的时候会判断是新建还是更新,如果是更新则会加上PUT method。看来Rails为我们处理了太多太多的细节,让我们可以更加傻瓜地应用框架。