ruby-on-rails - 新建 + 保存和创建之间的 Rails 差异

标签 ruby-on-rails ruby-on-rails-3

我是rails新手,我不明白new+save方法和create方法的使用之间的区别。

def create
    @item = Item.new(params[:item])

    respond_to do |format|
      if @item.save
        format.html { redirect_to @item, notice: 'Item was successfully created.' }
        format.json { render json: @item, status: :created, location: @item }
      else
        format.html { render action: "new" }
        format.json { render json: @item.errors, status: :unprocessable_entity }
      end
    end
end

和:

  def create

    respond_to do |format|
      if Item.create(params[:item])
        format.html { redirect_to @item, notice: 'Item was successfully created.' }
        format.json { render json: @item, status: :created, location: @item }
      else
        format.html { render action: "new" }
        format.json { render json: @item.errors, status: :unprocessable_entity }
      end
    end
  end

最佳答案

尽管create调用new然后save是正确的,但这两个替代方案的返回值之间存在很大差异。

Save 返回 truefalse,具体取决于对象是否已成功保存到数据库。然后,可以按照上述问题中的第一个示例将其用于流量控制。

Create 将返回模型,无论对象是否保存。这对上面的代码有影响,因为即使对象验证失败并且未保存, if 语句的顶部分支也将始终被执行。

如果您将create与分支逻辑一起使用,您将面临静默失败的风险,而如果您使用new + save,则情况并非如此。

create 替代方案在使用 respond_with 用于 API (JSON/XML) 响应的 Controller 中非常有用。在这种情况下,对象上存在的错误将导致在响应中返回错误,状态为 unprocessable_entity,这正是您希望从 API 获得的结果。

我总是对 html 使用 new + save 选项,特别是当您依赖返回值进行流量控制时。

关于ruby-on-rails - 新建 + 保存和创建之间的 Rails 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791386/

相关文章:

ruby-on-rails - 我应该验证连接表中的外键吗?

mysql - 销毁操作从错误的表中删除

javascript - 如何防止发送 ajax 调用两次

ruby-on-rails-3 - Rails——路由 : using a sub-directory before controller/action

ruby-on-rails - Rails 3,如何在创建主记录后添加关联记录(Books,自动添加BookCharacter)

ruby-on-rails - 从 Controller 内获取记录的更改

ruby-on-rails - Mongoid:使用多个数据库?

jquery - 单独 Controller Rails 3 中带有 form_tag 的错误消息

ruby-on-rails - Rails 3发布后对Rails 2的支持

ruby-on-rails-3 - Rails 3.2 - 使用远程 MySQL 数据库的 Heroku 部署