2014-07-25 33 views
10

Mam model użytkownika i model obserwatora, taki, że użytkownik może mieć wielu obserwujących. Tak więc w schemacie modelu follower mam kolumnę user_id i kolumnę follower_by_user_id. Tak więc w modelu naśladowcy użytkownik może być śledzony przez wielu obserwatorów. Identyfikator użytkownika jest przechowywany w kolumnie user_id, a id_śladowcy, których id są przechowywane jako follow_by_user_id.Jak obsłużyć klucz obcy w FactoryGirl

class User < ActiveRecord::Base 
has_many :followed_users, :class_name => 'Follower', :foreign_key => 'user_id' 
has_many :followers, :class_name => 'Follower', :foreign_key => 'followed_by_user_id' 

validates :email, presence: true, format:{ with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i} 

validates :name,presence:true 
end 

Powyżej jest model użytkownika

class Follower < ActiveRecord::Base 
belongs_to :user 
belongs_to :followed_by_user, :class_name => 'User', :foreign_key => 'followed_by_user_id' 

validates :user, :followed_by_user, presence:true 
validates_associated :user, :followed_by_user 
end 

powyżej jest zwolennikiem modelu

FactoryGirl.define do 
factory :user do 
    name {Faker::Name.name} 
    email {Faker::Internet.email} 
end 

factory :follower do 
    user 
    followed_by_user_id 
end 

followed_by_user_id jest w zasadzie tylko identyfikator użytkownika, czy można powiedzieć, user_id jest klucz obcy dla followed_by_user_id kolumnie. Im plain English follow_by_user_id jest identyfikatorem użytkownika, który podąża za innym użytkownikiem. Więc jeśli jakikolwiek organ może pomóc, aby włączyć tę relację klucza obcego w fabrykę obserwatorów dla kolumny follower_by_user_id?

Z góry dziękuję.

Odpowiedz

15

Można użyć association w swojej fabryce, tak (więcej informacji w docs):

association :followed_by_user, factory: :user 
+1

Dziękuję bardzo ... To uratowało mi życie. –

0

Nie trzeba tyle złożoności, należy po prostu:

followed_by_user factory: :user 

to działa jak urok.