我正在阅读一些Rails 3和4教程并遇到一些我喜欢的一些见解:
关于Create操作的Model.new和Model.create有什么区别。我以为你确实使用控制器中的create
方法来保存例如。 @post = Post.create(params[:post])
但看起来我错了。非常感谢任何见解。
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
@post.save
redirect_to post_path(@post)
end
def post_params
params.require(:post).permit(:title, :body)
end
def new
@post = Post.new
end
def create
@post = Post.create(post_params)
@post.save
redirect_to post_path(@post)
end
def post_params
params.require(:post).permit(:title, :body)
end
我有两个问题
@post = Post.create(post_params)
?答案 0 :(得分:23)
<强> Model.new 强>
以下实例化并初始化Post模型给出了参数:
@post = Post.new(post_params)
您必须运行save
才能将您的实例保留在数据库中:
@post.save
<强> Model.create 强>
以下实例化,在数据库中初始化并保存给出params的Post模型:
@post = Post.create(post_params)
您不需要运行save
命令,它已经内置。
有关new
here
有关create
here
答案 1 :(得分:0)
Model.new
方法创建一个nil模型实例,Model.create
方法另外尝试将其直接保存到数据库中。
Model.create
方法创建一个对象(或多个对象)并将其保存到数据库(如果验证通过)。无论对象是否已成功保存到数据库,都会返回结果对象。
object = Model.create
不需要任何object.save
方法将值保存在数据库中。
在Model.new
方法中,新对象可以实例化为空(不传递构造参数)
在Model.new(params[:params])
中预设有属性但尚未保存在DB中(传递一个散列,其键名与相关的表列名称相匹配)。
在object = Model.new
之后,我们需要按object.save