Rails控制器在Model.new和Model.create之间创建动作差异
我正在阅读一些Rails 3和4教程并遇到一些我喜欢的一些见解:
关于Create操作,Model.new和Model.create之间有什么区别。 我以为你确实使用控制器中的create
方法来保存例如。 @post = Post.create(params[:post])
但看起来我错了。 非常感谢任何见解。
使用Post.new创建操作
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
使用Post.create创建操作
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
我有两个问题
- 这与Rails 4的变化有关吗?
- 使用
@post = Post.create(post_params)
是不好的做法?
Model.new
下面给出params实例化并初始化Post模型:
@post = Post.new(post_params)
您必须运行save
才能在数据库中保留您的实例:
@post.save
Model.create
以下实例化,初始化并在数据库中保存给定params的Post模型:
@post = Post.create(post_params)
您不需要运行save
命令,它已经内置。
关于new
更多信息在这里
关于在这里 create
更多信息
Model.new
方法创建一个nil模型实例,而Model.create
方法还试图直接将它保存到数据库中。
如果validation通过, Model.create
方法创建一个对象(或多个对象)并将其保存到数据库。 无论对象是否已成功保存到数据库,都会返回结果对象。
object = Model.create
不需要任何object.save
方法来保存数据库中的值。
在Model.new
方法中,新对象可以实例化为空(不传递构造参数)
在Model.new(params[:params])
预先设置了属性但尚未保存在DB中(传递具有与关联表列名匹配的键名的哈希)。
在object = Model.new
,我们需要通过object.save
保存object.save