遵循 RailsTutorial book (http://ruby.railstutorial.org/chapters/sign-up#sec-signup_form)
我们有以下代码片段:
def new
@user = User.new
end
def create
@user = User.new(user_params)
....
end
为什么我们需要重新创建模型,如果用户转到/users/new def new 被调用并初始化@user变量,但在 post 请求 (def create) 时,调用 User.new,为什么会这样? 如果我们要在 Create 上创建一个新的用户模型,那么为什么要在 def new 中创建它?
因为每个请求都会生成一个新的控制器实例。 #new
有一个实例,#create
有另一个实例,另一个命中#new
创建另一个新实例。这些控制器实例不同,它们的实例变量@user
也不同。
new
不会将模型保存到数据库中。它只是实例化一个临时实例。
因此,当动作new
调用User.new
时,它会创建一个没有值的颤抖变量 - 然后将其传递给视图以帮助显示表单...然后那个临时变量被扔掉。
当您点击表单上的提交按钮时,表单参数将发送到应用程序中的create
操作,然后使用参数调用User.new
以实例化新模型 - 使用表单中传递的值。
然后,您的 create 方法通常会在模型上调用 save
,这会将数据保存到数据库中。