我们项目需求要关联表具有两个外键的功能,其实语法很简单代码如下

  1. class SubscriptionRecord < ActiveRecord::Base  
  2.  belongs_to :sender
  3.              :class_name => 'User'
  4.              :foreign_key => 'sender_id' 
  5.   belongs_to :receiver
  6.              :class_name => 'User'
  7.              :foreign_key => 'receiver_id' 
  8. end 
  1. class User < ActiveRecord::Base 
  2.  has_many :receivers, 
  3.            :class_name => "SubscriptionRecord", 
  4.            :foreign_key => "receiver_id" 
  5.  
  6.  
  7.   has_many :senders, 
  8.            :class_name => "SubscriptionRecord", 
  9.            :foreign_key => "sender_id" 
  10. end 

语法并不是很难,关键在于

  1. has_many :receivers, 
  2.            :class_name => "SubscriptionRecord", 
:class_name => "SubscriptionRecord", 注意要写大写不可用小写加下划线的方式代替。

而下面在说说一个新语法构建factory_girl的测试用例

代码如下

 

  1. factory :user_with_senders:class => :user do 
  2.  
  3.      ignore do 
  4.        sample_size 5 
  5.      end 
  6.      after_create do |user, evaluator| 
  7.        FactoryGirl.create_list(:subscription_record, evaluator.sample_size, sender: user) 
  8.      end 
  9.    end 
  10.  
  11.    factory :user_with_metadata:class => :user do 
  12.  
  13.      ignore do 
  14.        sample_size 5 
  15.      end 
  16.      after_create do |user, evaluator| 
  17.        FactoryGirl.create_list(:metadatum, evaluator.sample_size, user: user) 
  18.      end 
  19.  
  20.    end 

主要是用了FactoryGirl.create_list 这个语法主要用处在于可以批量构建需要的关联表创建

语法FactoryGirl.create_list(:metadatum, evaluator.sample_size, user: user)  

如上 第一个是创建的factory用列,而一个是创建的个数,第三个是属性值,也就是belong_to定义额外键。