2014-09-17 3 views
0

프론트 엔드 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 

답변

0

: -

UPDATE

는 여기가 가져있어 DB에 관계입니다.

def create_hierarchy post, content 
    [...] 
    @term_attributes = { 
     :name => category_name.strip, 
     :slug => @slug_builder += (@slug_builder.present? ? '-' : '') + slugify(category_name) 
    } 
    @term = Term.where(@term_attributes).first_or_create! 

    @term_taxonomy_attributes = { 
     :term_id => @term.id, 
     :taxonomy => 'category' 
    } 
    @term_taxonomy = @term.term_taxonomies.where(@term_taxonomy_attributes).first_or_create! 

    [...] 

    # Add or update post 
    if @term_taxonomy.posts.exists? post 
     @term_taxonomy.posts.find(post.ID).update_attributes(post.attributes) 
    else 
     @term_taxonomy.posts << post 
    end 

    @term.save! 
    @term_taxonomy.save! 
end 
:

내가 내 컨트롤러를 변경 것입니다