为什么我们使用Model.new进行def new和def create?

时间:2013-09-27 04:32:33

标签: ruby-on-rails

遵循RailsTutorial一书(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 request(def create)上,User.new被召回,为什么这样?如果我们要在create上创建一个新的用户模型,那么为什么要在def new中创建它?

2 个答案:

答案 0 :(得分:1)

因为每个请求都会生成一个新的控制器实例。 #new有一个实例,#create有另一个实例,#new上的另一个点击创建另一个新实例。这些控制器实例是不同的,它们的实例变量@user是不同的。

答案 1 :(得分:1)

new不会将模型保存到数据库中。它只是实例化一个临时实例。

因此,当操作 new调用User.new时,它会创建一个没有值的临时变量 - 然后传递给视图以帮助显示表单。 ..然后那个临时变量被扔掉了。

当您点击表单上的提交按钮时,表单参数会被发送到应用程序中的create操作,然后使用参数调用User.new来实例化一个新模型 - 传递的值在表格中。

您的create方法通常会在模型上调用save,这会将数据保存到数据库中。