遵循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中创建它?
答案 0 :(得分:1)
因为每个请求都会生成一个新的控制器实例。 #new
有一个实例,#create
有另一个实例,#new
上的另一个点击创建另一个新实例。这些控制器实例是不同的,它们的实例变量@user
是不同的。
答案 1 :(得分:1)
new
不会将模型保存到数据库中。它只是实例化一个临时实例。
因此,当操作 new
调用User.new
时,它会创建一个没有值的临时变量 - 然后传递给视图以帮助显示表单。 ..然后那个临时变量被扔掉了。
当您点击表单上的提交按钮时,表单参数会被发送到应用程序中的create
操作,然后使用参数调用User.new
来实例化一个新模型 - 传递的值在表格中。
您的create方法通常会在模型上调用save
,这会将数据保存到数据库中。