Rails变形虫宝石不会复制多对多关系

时间:2015-08-20 08:44:32

标签: ruby-on-rails many-to-many amoeba-gem

我在复制数据库记录时遇到问题。我有一个简单的模型用户,它包含与语言模型的一对多关系以及与技能模型的多对多关系。我想使用变形金刚宝石复制所有关联的记录。一对多复制工作正常,但多对多复制根本不复制。

以下是用户和技能模型的代码:

user.rb

class User < ActiveRecord::Base
  belongs_to :language
  has_and_belongs_to_many :skills

    validates_presence_of :email, :name
    validates :email, 
        presence: { with: true, message: "cannot be empty" }, 
        uniqueness: { with: true, message: "already exists in database" }

  amoeba do
    enable
  end
end

skill.rb

class Skill < ActiveRecord::Base
  has_and_belongs_to_many :users
end

我还有用于创建用户,技能和技能用户表的迁移文件:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.string :email, null: false
      t.references :language
      t.timestamps null: false
    end
  end
end

class CreateSkills < ActiveRecord::Migration
  def change
    create_table :skills do |t|
      t.string :name
      t.timestamps null: false
    end
  end
end

class AddUsersSkillsTable < ActiveRecord::Migration
  def change
    create_table 'skills_users', :id => false do |t|
      t.column :user_id, :integer
      t.column :skill_id, :integer
    end
  end
end

users_controller中的控制器操作'show'如下所示:

def copy
    @user_copy = @user.dup
    if @user_copy.save(validate: false)
        redirect_to action: "index"
    end
end

我尝试像这样在user.rb中复制关系,但它没有用:

amoeba do
    enable
    clone [:skills]
end

可能导致问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

好的,我发现了错误。我写了

@user_copy = @user.dup 

在控制器文件中而不是

@user_copy = @user.amoeba_dup