在控制器中定义创建操作时,使用这两种方法之间的区别是什么。
def create
@item = Item.new(name: item_params[:name])
@item.save
end
VS
def create
@item = Item.create(name: item_params[:name])
end
一个人比另一个好吗?
答案 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