1

这个问题是关于 Rails 3.2 的,比标题所暗示的要复杂一些。

假设我们有一个 Pages 控制器,其中包含所有 RESTful 操作。此 Web 应用程序可以创建页面、显示、编辑和删除现有页面,并列出所有现有页面。

在新动作下,我有一些代码

@page = Page.new

那么,当用户访问 /pages/new 并填写 form_for(@page) do..end 内容时,输入数据会保存到@page 吗?例如,如果标题和内容是页面模型属性,@page.title 和@page.content 会返回错误或显示我们正在寻找的内容吗?还是 form_for 会直接将值保存到参数中?

如果稍后是这种情况,为什么我们在新操作中声明@page?是否存在以便 form_for 可以推断 Rails 即将创建一个新的 Page 模型对象而不是现有的?

希望这不会太令人困惑。:P

4

2 回答 2

3

你可以写一个班级的表格

form_for :post

在 Rails 中,使用

form_for @post

因为这样您就可以为、(在验证错误时)和(在验证错误时)操作呈现相同的form部分。这就是为什么您需要在新操作中初始化一个新的“空”对象 - 以保持界面统一。newcreateeditupdate

于 2013-07-18T11:29:58.250 回答
2

这样 form_for 会显示一个空页面,而 form_for ... 因为它有一个空对象供参考 ... 可以从模型中推断出应该如何构造表单。

这解释了一些细节......

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

@page 之类的实例变量在页面呈现后不会持续存在,因此当返回表单数据时,您将使用该表单数据在控制器逻辑中创建新的页面对象。

通常,如果由于验证错误而无法保存新对象,您将使用未保存的对象实例重新呈现表单页面,因此该字段将显示用户输入的数据并且用户可以更正任何问题。

于 2013-07-18T10:04:01.550 回答