2014-12-05 99 views
1

我需要找到构建我的模型对象的最佳方法。 我继承了代码库,它不是很漂亮。FactoryGirl关于多态关联

class Notification < ActiveRecord::Base 
    attr_accessible :author_id, :notifable_id, :notifable_type, :seen, :user_id 
    belongs_to :notifiable, :polymorphic => true 

所以AUTHOR_ID和user_ID的是隐式指针,用户模型

#A user 
has_many :notifications 

的多态性有关法定允许有类似的模型呈报的实例。 当你喜欢一个职位,你创建一个通知,像一个通知,并有一个作者和一个接收者(user_id)

我有麻烦,为有通知的用户通知)

factory :notification do |f| 
    n = FactoryGirl.generate(:number_notification) 
    user = create(:user) 
    #author_id 
    f.author_id user.id 
    f.user_id :user_dest 
    f.association :user, user 
end 

factory :notification_like, parent: :notification do |f| 
    f.notifiable_type "Like" 
    f.notifiable_id 1 
end 

此代码不起作用。它抱怨user.id,说它不存在。

我的功能测试是这样的:

let(:max) { create(:user) } 
let(:notification) { create(:notification_like, :user_dest => max.id) } 
let(:login_page) { HomeLoginPage.new } 
let(:main_page) { MainPage.new } 

scenario "login" do 
    notification 
    login_page.visit_page.login(max) 
    main_page 
    sleep(60) 
end 

回答

0

您需要使用callbacks,让您工作的关联。

factory :notification do |f| 
    FactoryGirl.generate(:number_notification) 
    user 

    after(:build) do |notification| 
    notification.author_id = notification.user.id 
    notification.user_id = notification.user.id 
    end 
end