2
중요 레일 복합 고유 인덱스와 테이블을 가입 레코드를 추가 할 수 없습니다 SQLite3에서 고유 한 복합 키 인덱스를 사용하여 조인 테이블에 레코드합니다. 내가 한 모든 (수동) 테스트에서 데이터베이스는 db : drop 다음에 db : migrate를 통해 완전히 다시 빌드되었습니다.3.2
오류 :
ActiveRecord::RecordNotUnique
SQLite3::ConstraintException: columns adventurer_id, item_id are not unique:
INSERT INTO "adventurers_items" ("adventurer_id", "item_id") VALUES (1, 68)
에러 생성하는 코드 :
class AdventurersItems < ActiveRecord::Migration
def change
create_table :adventurers_items do |t|
t.integer :item_id, :null => false
t.integer :adventurer_id, :null => false
end
add_index :adventurers_items, :item_id
add_index :adventurers_items, :adventurer_id
add_index :adventurers_items, [:adventurer_id, :item_id], :unique => true
0 조인 테이블 adventurers_skills를 생성
class Adventurer < ActiveRecord::Base
after_create :set_starting_skills
after_create :set_starting_items
has_and_belongs_to_many :items
has_and_belongs_to_many :skills
# automatically add starting skills on creation
def set_starting_skills
self.skills = self.profession.starting_skills
end
# automatically add starting items on creation
def set_starting_items
self.items = self.profession.items
end
마이그레이션
테이블이 있고 완전히 비어 있습니다. 고유성 제약으로 인해 애플리케이션에서이 레코드를 삽입하지 못하는 이유는 무엇입니까? 또한 동일한 테이블 "adventurers_skills"와 동일한 오류가 있습니다 - 제가 구조적으로 잘못된 것을하고 있습니까?
편집
시스템은 두 번 같은 아이템/스킬을 추가하려고합니다. 개인 메소드를 다음과 같이 변경하면 :
def set_starting_skills
skills = profession.starting_skills
end
조인 테이블에 아무 것도 만들지 않습니다.
1.9.3-p194 :022 > Profession.find(7).starting_skills.each {|x| puts x.id}
54
를 따라서 : 그러나 아래 self.skills하는 첫 번째 라인을 되 돌리는 것은이 아니라 하나 개의 기술이 profession.starting_skills
에 대해 반환
(0.4ms) INSERT INTO "adventurers_skills" ("adventurer_id", "skill_id") VALUES (4, 54)
(4.9ms) INSERT INTO "adventurers_skills" ("adventurer_id", "skill_id") VALUES (4, 54)
SQLite3::ConstraintException: columns adventurer_id, skill_id are not unique:
INSERT INTO "adventurers_skills" ("adventurer_id", "skill_id") VALUES (4, 54)
(3.2ms) rollback transaction
같은 기술을 생성 두번
def set_starting_skills
self.skills = profession.starting_skills
end
반환하려고 시도 진짜 질문은 : Rails가이 HABTM 레코드를 두 번 추가하려고하는 이유는 무엇입니까?
오류를 나타내는 코드를 알려주십시오. 모델과 마이그레이션은 실제로 데이터를 삽입하지 않습니다. 그래도 뭔가가 있습니다. 그래서 우리에게 "다른 것"을 보여주세요. –
음, 콜백 메소드를 어딘가에서 두 번 호출하는 버그가있어서 항목을 두 번 삽입하려고했습니다. – DrFunk
그래서이 문제를 해결 했습니까? 왜냐하면 나는 똑같은 것을 얻고 있기 때문이다. – dukedave