Rails amoeba gem не копирует отношение многие ко многим
У меня проблема с копированием записей базы данных. У меня есть простая модель User, которая содержит отношение "один ко многим" с моделью языка и отношение "многие ко многим" с моделью навыка. Я хотел использовать драгоценный камень амеба для копирования записей со всеми ассоциациями. Копирование "один ко многим" работает хорошо, но "многие ко многим" не копирует вообще.
Вот код модели User и Skill:
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
У меня также есть миграционные файлы, в которых хранятся таблицы пользователей, skill и skill_users:
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
Действие контроллера "show" в users_controller выглядит следующим образом:
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 ответ
Хорошо, я нашел ошибку. я написал
@user_copy = @user.dup
в файле контроллера вместо
@user_copy = @user.amoeba_dup