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



遵循 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,这会将数据保存到数据库中。

最新更新