如何在控制器中创建记录副本?

时间:2011-08-21 08:53:32

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

我正在尝试创建一个创建已检查对象副本的操作。

到目前为止我的行动:

  def create_multiple
    @webhost = Webhost.find(params[:webhost_ids])
    @webhost.each do |webhost|
    Webhost.new(:webhost)
    end
    respond_to do |format|
      format.html { redirect_to(:admin_webhosts, :notice => 'Konkurrancerne er nu slettet') }
      format.xml  { head :ok }
    end
end

操作呈现但未创建新的Web主机副本。

2 个答案:

答案 0 :(得分:1)

'new'方法仅实例化一个新对象。它不会将对象持久保存到您的数据库(或其他)。您要么必须在该对象上调用save,要么可以执行

def create_multiple
    @webhost = Webhost.find(params[:webhost_ids])
    @webhost.each do |webhost|
    Webhost.create(webhost.attributes)
    end
    respond_to do |format|
      format.html { redirect_to(:admin_webhosts, :notice => 'Konkurrancerne er nu slettet') }
      format.xml  { head :ok }
    end
end

调用create将实例化一个新对象并保存(只要它通过任何验证)。

答案 1 :(得分:1)

尝试是否有效(请注意create而不是new,因为new本身不会保存它):

def create_multiple
    @webhost = Webhost.find(params[:webhost_ids])
    @webhost.each do |webhost|
    Webhost.create(webhost.attributes)
    end
    respond_to do |format|
      format.html { redirect_to(:admin_webhosts, :notice => 'Konkurrancerne er nu slettet') }
      format.xml  { head :ok }
    end
end