11

我正在阅读一些 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)吗?
4

2 回答 2

24

模型.new

给定参数,以下实例化并初始化 Post 模型:

@post = Post.new(post_params)

您必须运行save才能将实例持久保存在数据库中:

@post.save

模型创建

以下实例化,初始化并在数据库中保存给定参数的 Post 模型:

@post = Post.create(post_params)

您不需要运行该save命令,它已经内置。

更多信息在new 这里

更多信息在create 这里

于 2013-07-31T07:18:04.343 回答
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

于 2013-07-31T07:15:25.460 回答