프론트 엔드 HTML 컨텐트를 스케치하고 저장하고 구성한 다음 다른 DB에 저장하는 데 도움이되는 로컬 RoR 애플리케이션을 만들었습니다. 저는 현재 조직의 개발을 시작하고이 내용을 다른 데이터베이스로 가져옵니다. 이것은 post 객체의 many-to-many 관계를 term_taxonomy에 저장 (또는있을 경우 업데이트) 할 수 있어야한다는 점을 제외하고는 잘 진행되고 있습니다. (컨트롤러)many to many relationships 생성 또는 저장
다음 코드 :
def create_hierarchy post, content
[...]
@crumbs.each do |crumb|
@term_attributes = {
:name => crumb.strip,
:slug => crumb.parameterize.split(' ').join('-').downcase
}
@term = Term.where(@term_attributes).first_or_initialize
@term_taxonomy = TermTaxonomy.where({:term_id => @term.id, :taxonomy => 'category'}).first_or_initialize
@term_taxonomy.posts << post
@term.term_taxonomies << @term_taxonomy
@term.save!
end
[...]
end
코드 오류 @term_taxonomy.posts << post
결과 : Mysql2::Error: Duplicate entry ...
내가 만 후 처음 실행할 때. 처음 실행될 때 Term_taxonomy와 Post 간의 다 대다 관계가 문제없이 성공적으로 저장됩니다.
term_taxonomy와의 다 대다 관계에 대해 저장 (또는 게시 관계가 있으면 업데이트)을 수행하는 더 좋은 방법은 무엇입니까? 내가 그것을 알아 냈어요
class Post < ActiveRecord::Base
[...]
has_many :term_relationships, :foreign_key => 'object_id', autosave: true
has_many :term_taxonomies, :through => :term_relationships
end
class TermRelationship < ActiveRecord::Base
[...]
belongs_to :post, :foreign_key => "object_id"
belongs_to :term_taxonomy
has_one :term, :through => :term_taxonomy
end
class TermTaxonomy < ActiveRecord::Base
[...]
belongs_to :term, autosave: true
has_many :term_relationships, :foreign_key => 'term_taxonomy_id'
has_many :posts, :through => :term_relationships
end
class Term < ActiveRecord::Base
[...]
has_many :term_taxonomies, foreign_key: 'term_id'
end