2012-01-17 2 views
1

설정 내 사이트에 기능처럼 "다음"하지만 난 다형성 연결을 사용할 수있는 권리 방법을 찾는 데 문제가 있어요. 사용자는 3 개의 다른 클래스를 따라갈 수 있어야하며,이 3 개의 클래스는 사용자를 따라 가지 않습니다. 나는 과거에 사용자를 따르는 사용자를 만들었지 만 이것이 더 어렵다는 것이 입증되었습니다.내가 추가하려고 다형성 연관

내 마이그레이션 내 관계 모델

has_many :relationships, :foreign_key => "supporter_id", :dependent => :destroy 

다른 3 개 모델에서 내 사용자 모델에서

class Relationship < ActiveRecord::Base 
    attr_accessible :relations_id 
    belongs_to :relations, :polymorphic => true 
    has_many :followers, :class_name => "User" 
end 

입니다

class CreateRelationships < ActiveRecord::Migration 
    def change 
    create_table :relationships do |t| 
     t.integer :follower_id 
     t.integer :relations_id 
     t.string :relations_type  
     t.timestamps 
    end 
    end 
end 

했다

has_many :relationships, :as => :relations 

나는이 관계를 설정하는 뭔가를 놓치고 있습니까?

+0

당신이 콘솔을 통해이 테스트를 시도? 마이그레이션을 실행했는지 확인하십시오. '다른 3 가지 모델'은 무엇입니까? –

+0

'has_many : relationships, : foreign_key => "supporter_id"'에 대해 자세히 설명 할 수 있습니까? –

+0

죄송합니다 "supporter_id"는 오타되었습니다 –

답변

5

당신은 기본적으로 몇 가지 사소한 오류를 제외하고, 바로 그것을 가지고 :

  • attr_accessible :relations_id 중복입니다. Relationship 모델에서 삭제하십시오.

  • RelationshipUser 모델은 모두 has_many을 호출하여 서로 연결합니다. Relationship에는 외래 키가 포함되어 있기 때문에 belongs_to을 호출해야합니다. 당신의 User 모델에서

  • , :foreign_key => "follower_id"을 설정합니다. 여기


내가 어떻게 할 것입니다.

내용 측면에는 followable 다형성 연관이있는 중급 클래스가 있고 follower 사용자 측면에는 has_many가 있습니다 (사용자가 많음).

class CreateFollows < ActiveRecord::Migration 
    def change 
    create_table :follows do |t| 
     t.integer :follower_id 
     t.references :followable, :polymorphic => true 
     t.timestamps 
    end 
    end 
end 

Follow 모델 Relationship 모델을 교체 :

class Follow < ActiveRecord::Base 
    belongs_to :followable, :polymorphic => true 
    belongs_to :followers, :class_name => "User" 
end 

User 모델에 포함 :

has_many :follows, :foreign_key => :follower_id 

이 세 followable에 포함

첫째, follows 테이블을 생성 수업 :

has_many :follows, :as => :followable 

이제이 작업을 수행 할 수 있습니다

TheContent.follows # => [Follow,...] # Useful for counting "N followers" 
User.follows   # => [Follow,...] 
Follow.follower  # => User 
Follow.followable # => TheContent 
+0

도움 주셔서 대단히 감사합니다. 지금은 문제를 만들기 및 따르기 양식을 구현하는 동안 실행하고 있습니다. 어떤 팁? –

관련 문제