如何在FactoryGirl中处理外键

时间:2014-07-25 20:15:53

标签: ruby-on-rails ruby-on-rails-4 factory-bot faker

我有一个用户模型和一个关注者模型,这样用户可以有很多粉丝。因此,在跟随者模型的模式中,我有user_id列和follower_by_user_id列。因此,在跟随者模型中,许多粉丝可以跟随用户。用户ID存储在user_id列中,关注者ID的ID存储在follow_by_user_id中。

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

以上是用户模型

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

以上是追随者模型

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基本上只是一个用户ID,或者我们可以说user_id是follow_by_user_id列的外键。 Im plain English followed_by_user_id是跟随其他用户的用户的id。那么,如果任何正文可以帮助如何在follower工厂中为follower_by_user_id列包含这个外键关系?

提前致谢。

2 个答案:

答案 0 :(得分:21)

您可以在工厂中使用association,例如docs中的更多信息):

association :followed_by_user, factory: :user

答案 1 :(得分:4)

您不需要那么多复杂性,只需使用:

followed_by_user factory: :user

这就像一个魅力。