복붙노트

[RUBY-ON-RAILS] 많은 자기에 많은 참여 레일

RUBY-ON-RAILS

많은 자기에 많은 참여 레일

수 올바른 방향으로 어떤 하나의 포인트 나 :

나는 레일에 대한 모델을 구축하려고 그 다음 구축 :

를 ClassA    -id

를 ClassA 많은 "를 ClassA"에 관계가 (그 자체로 참조하므로)

나는 마이그레이션 및 모델을 찾고 있어요.

나는 모르겠 올바른 테이블이 조인 것을 (나는 그것의 간단한 2 열 테이블 ClassA_id, ClassARel_ID 생각 ->를 ClassA에게 모두 포인트) 방법과 모델을 구축하는 방법

감사!

해결법

  1. ==============================

    1.내가 좋아하는 뭔가를 사용하십시오

    내가 좋아하는 뭔가를 사용하십시오

    class Person < ActiveRecord::Base
       has_many :friendships, :foreign_key => "person_id", 
          :class_name => "Friendship"
    
       has_many :friends, :through => :friendships
    end
    
    class Friendship < ActiveRecord::Base
       belongs_to :person, :foreign_key => "person_id", :class_name => "Person"
       belongs_to :friend, :foreign_key => "friend_id", :class_name => "Person"  
    end
    

    그리고 테이블은 같은 것

    people: id; name; whatever-you-need    
    friendships: id; person_id; friend_id
    
  2. ==============================

    2.이 두 가지를 결합하는 또 다른 클래스를 생성하기 위해 너무 많은 이해가되지 않는 경우, 다른 방법이 될 수있다 :

    이 두 가지를 결합하는 또 다른 클래스를 생성하기 위해 너무 많은 이해가되지 않는 경우, 다른 방법이 될 수있다 :

    class Word < ActiveRecord::Base 
      has_and_belongs_to_many :synonyms, class_name: "Word", 
                                         join_table: "word_synonyms",
                                         association_foreign_key: "synonym_id"
    end
    

    테이블이 같을 것이다 가입 :

    create_table :word_synonyms do |t|
      t.integer :word_id
      t.integer :synonym_id
    end
    
  3. ==============================

    3.이 포스팅은 좋은 작업 예제가 있습니다 : http://blog.hasmanythrough.com/2007/10/30/self-referential-has-many-through

    이 포스팅은 좋은 작업 예제가 있습니다 : http://blog.hasmanythrough.com/2007/10/30/self-referential-has-many-through

    뿐만 아니라 여기에 관련된 질문이 있습니다 : 자기 참조 has_many에 문제가 : 레일에 협회를 통해

  4. ==============================

    4.불행히도의 휘슬러 대답은 많은 경우에 적합하지 않을 수 있습니다. 예를 들어,이 두 가지를 작동하지 않습니다. 예를 들어, 새로운 단어를 만들 가정 :

    불행히도의 휘슬러 대답은 많은 경우에 적합하지 않을 수 있습니다. 예를 들어,이 두 가지를 작동하지 않습니다. 예를 들어, 새로운 단어를 만들 가정 :

    word = Word.create(:word_name => 'tremble')
    ['shake', 'vibrate'].each { |syn| word.synonyms.create(:word_name => syn) }
    

    이제, 당신이 할 경우 :

    word = Word.find_by_word_name('tremble')
    p word.synonyms # this would print out the Words with the word_name 'shake' and 'vibrate'.
    

    하나, 당신은 그것을 다른 방법으로 주위를 한 경우 :

    word = Word.find_by_word_name('vibrate')
    
    p word.synonyms # this would print an empty association.
    

    이 단어 '진동은'NO 동의어를 가지고 말하고있다.

    그러니까 기본적으로,이 방법은 (즉 진동이 떨게의 동의어이며, 떨게은 진동의 동의어이다) 두 가지를 작동하지 않습니다

    편집 : 어떤 의미에서, 당신은 그러나 당신이 명시 적으로 각 단어의 동의어를 할당해야 할 것입니다,이 방법을 사용할 수 있습니다. 당신이 ( '진동'과 '흔들림'이다) 떨게의 동의어를 지정 그래서 있지만, 당신은 여전히에있는 '흔들림'의 동의어를 지정합니다 ( '어느입니다'떨림 '과'진동 ')와'진동 '(이다' 뿐만 아니라 '및 쉐이크')를 떨다.

  5. from https://stackoverflow.com/questions/3396831/rails-many-to-many-self-join by cc-by-sa and MIT license