【问题标题】:Rails controller create action difference between Model.new and Model.createRails 控制器创建 Model.new 和 Model.create 之间的操作差异
【发布时间】:2013-07-31 07:02:17
【问题描述】:

我正在阅读一些 Rails 3 和 4 教程,并遇到了一些我希望了解的内容:

就创建操作而言,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) 是不好的做法吗?

【问题讨论】:

  • Rails new vs create 的可能重复项
  • 感谢 Amadan 的参考。 GETPOST 的 Rails REST 实现是否与控制器操作 newcreate 相同?我试图澄清 REST 与控制器操作与控制器方法。
  • 对不起,我应该澄清一下; Justin Ethier 的回答特别提到了 ActiveRecord 方法。

标签: ruby-on-rails ruby-on-rails-3.2 ruby-on-rails-4


【解决方案1】:

Model.new

以下实例化并在给定参数的情况下初始化 Post 模型:

@post = Post.new(post_params)

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

@post.save

Model.create

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

@post = Post.create(post_params)

你不需要运行save 命令,它已经内置了。

更多信息newhere

更多信息createhere

【讨论】:

    【解决方案2】:

    Model.new 方法创建一个 nil 模型实例,Model.create 方法还尝试将其直接保存到数据库中。

    Model.create 方法创建一个对象(或多个对象)并将其保存到数据库,如果验证通过。无论对象是否成功保存到数据库,都会返回结果对象。

    object = Model.create 不需要任何object.save 方法来保存数据库中的值。


    Model.new 方法中,新对象可以实例化为空(不传递构造参数)

    Model.new(params[:params]) 中预先设置了属性但尚未保存在数据库中(传递一个带有与关联表列名匹配的键名的哈希)。

    object = Model.new之后,我们需要通过object.save保存对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多