Rails - 在定义create动作时使用.new()vs .create()方法

时间:2016-01-25 18:31:31

标签: ruby-on-rails

在控制器中定义创建操作时,使用这两种方法之间的区别是什么。

def create
  @item = Item.new(name: item_params[:name])
  @item.save
end

VS

def create
  @item = Item.create(name: item_params[:name])
end

一个人比另一个好吗?

3 个答案:

答案 0 :(得分:2)

新方法将返回一个新对象,而create将返回该对象并将其保存到数据库中。使用新方法,可以在不保存的情况下实例化对象。来自Active Record Basics

答案 1 :(得分:0)

New在内存中实例化该项。创建将其保留在数据库中。

假设您正在创建新记录,当您加载表单时,您For Each ws In Sheets(Array("01 - Currencies", "14 - User Defined Fields")) 将该记录存储在内存中。然后,当您完成表单后,您new并将其保存在数据库中。

答案 2 :(得分:0)

如果您只需要创建对象:

def create
  @item = Item.create(name: item_params[:name])
end

它更小,更易读,但

如果您的行动条件首先使用:

def create
  @item = Item.new(name: item_params[:name])
  if @item.save
    redirect_to ...
  else
    render:new
  end
end

您也可以先检查对象是否有效。在这种情况下,如果根本不打开对象无效事务(DB连接)。

def create
  @item = Item.new(name: item_params[:name])
  if @item.valid? && @item.save
    redirect_to ...
  else
    render:new
  end
end