克隆(即复制)一条记录。

14 浏览
0 Comments

克隆(即复制)一条记录。

我需要复制一条记录,除了课程的ID以外,其他属性与原始记录相同。我这样做:

在视图中:

<%= link_to "复制", :action => "clone", :id => Some_Existing_ID %>

在控制器中:

def clone
  @item = Item.find(params[:id]).clone
  if @item.save
    flash[:notice] = '成功复制该项。'
  else
    flash[:notice] = '错误:无法复制该项。'
  end
  redirect_to(items_path)
end      

但是什么都没有发生!在控制台上我发现clone生成的副本没有ID。

有什么想法吗?

顺便说一下:我正在运行Rails 2.3.5和Ruby 1.8。

0
0 Comments

问题的原因是在克隆(duplicate)记录时,克隆的记录可能根据验证规则实际上是无效的。解决方法是尝试使用.save!代替.save,并检查是否会抛出异常。还可以直接在控制台实例中尝试代码。在控制台中,我发现克隆操作生成的副本没有ID。这是真的,#clone实际上只是创建了一个克隆,但没有保存记录。这就是为什么在你的操作中需要调用保存方法的原因,这也是你实际上使用if .save来保存记录的地方。使用Item.save!后,我发现有一个验证错误弹出。谢谢!

0
0 Comments

问题:Clone(即复制)一个记录的问题的出现原因是什么?如何解决?

在Rails中,使用clone方法来复制(即克隆)一个记录是一个常见的操作。然而,从某个版本的Rails开始,这种方法已经不再支持了。现在,clone方法委托给使用Kernel#clone的方法,这将复制对象的id。这就导致了一个问题,即克隆一个记录时,新记录的id将与原记录相同,这可能会导致数据冲突和错误。

为了解决这个问题,我们需要避免使用clone方法,而是使用dup方法来复制记录。在Rails 3.1及以上版本中,可以使用以下代码来复制一个记录:

new_record = old_record.dup

通过使用dup方法,我们可以确保新记录的id与原记录不同,从而避免了数据冲突和错误的发生。

0
0 Comments

问题的出现的原因是克隆记录时,克隆的记录的id字段没有自动递增,这是因为克隆操作实际上是数据库操作。所以在保存克隆的记录之前,id字段没有更新。但是保存之后,id字段被更新了,数据库中包含了克隆的记录。

解决方法是在克隆操作后,可以通过在控制台打印出原始记录和克隆记录的内容,来判断克隆是否成功。可以使用logger.debug .inspect来打印内容。同时,在保存之后也可以打印出克隆的记录,来确认是否发生了变化。

0