복붙노트

[RUBY-ON-RAILS] 레일 : 자기 has_and_belongs_to_many과 제도에 가입?

RUBY-ON-RAILS

레일 : 자기 has_and_belongs_to_many과 제도에 가입?

또한 클래스 사용자의 많은 친구를 갖는 사용자의 구조를 만들 싶습니다 :

class User < ActiveRecord::Base
  has_and_belongs_to_many :friends, class_name: "User"
end

를 통해 클래스 우정의 종류 : 나는 이렇게 내가 사용하지 않는 관계의 세부 사항을 필요가 없습니다. 하지만 지금은 (: 문자열 ... 명령도 마이그레이션 파일이나 레일을 g 모델 사용자 이름을 사용하여) 해당 데이터베이스를 생성하는 방법을 어떤 방법을 찾을 수 없습니다. 어떤 아이디어?

해결법

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

    1.여기에 도움이 될 수있는 몇 가지 자료입니다 :

    여기에 도움이 될 수있는 몇 가지 자료입니다 :

    나는 그 링크에있는 정보를 요약 할 수 있습니다 :

    당신이 자기 참조 대다 관계를 설명하고 있음을 감안할 때, 당신의 물론 테이블을 조인으로 종료됩니다. 일반적으로는 그러나 "자기 참조"부분은 이것을 어색 조금하지만 어려운 일이 아니다 만들고, 테이블이 의도적으로 레일이 자동으로 테이블이 결합 된 모델을 알아낼 것 같은 방식으로 이름을 지정해야 가입 할 수 있습니다. (가) 테이블뿐만 아니라 결합 열을 가입의 당신은 단순히 이름을 지정해야합니다.

    당신은 아마 다음과 같을 것이다 마이그레이션을 사용하여이 테이블을 만들어야합니다 :

    class CreateFriendships < ActiveRecord::Migration
      def self.up
        create_table :friendships, id: false do |t|
          t.integer :user_id
          t.integer :friend_user_id
        end
    
        add_index(:friendships, [:user_id, :friend_user_id], :unique => true)
        add_index(:friendships, [:friend_user_id, :user_id], :unique => true)
      end
    
      def self.down
          remove_index(:friendships, [:friend_user_id, :user_id])
          remove_index(:friendships, [:user_id, :friend_user_id])
          drop_table :friendships
      end
    end
    

    나는이 테이블을 생성하는 바로 가기 방법이 있는지 확실하지 않다, 그러나 최소한 당신은 단순히 self.up 및 self.down 방법에 레일 g 마이그레이션 create_friendships 및 충전을 할 수 있습니다.

    (가)과 같이, 테이블 조인의 그리고 마지막으로 사용자 모델에서, 당신은 단순히 이름을 추가 :

    class User < ActiveRecord::Base
      has_and_belongs_to_many :friends, 
                  class_name: "User", 
                  join_table: :friendships, 
                  foreign_key: :user_id, 
                  association_foreign_key: :friend_user_id
    end
    

    당신이 볼 수 있듯이, 당신이 할 동안 모델에 합류, 아니 거기에 관련되는 데이터베이스 테이블에 가입해야합니다.

    날이 당신을 위해 작동 여부를 알려 주시기 바랍니다.

  2. from https://stackoverflow.com/questions/19770888/rails-self-join-scheme-with-has-and-belongs-to-many by cc-by-sa and MIT license