该设计
我有一个通过多态关联属于某个配置文件的用户模型。我选择此设计的原因可以在这里找到。总而言之,该应用程序有许多用户具有完全不同的配置文件。
class User < ActiveRecord::Base
belongs_to :profile, :dependent => :destroy, :polymorphic => true
end
class Artist < ActiveRecord::Base
has_one :user, :as => :profile
end
class Musician < ActiveRecord::Base
has_one :user, :as => :profile
end
选择此设计后,我很难进行良好的测试。使用FactoryGirl和RSpec,我不确定如何以最有效的方式声明关联。
第一次尝试
factory.rb
Factory.define :user do |f|
# ... attributes on the user
# this creates a dependency on the artist factory
f.association :profile, :factory => :artist
end
Factory.define :artist do |a|
# ... attributes for the artist profile
end
user_spec.rb
it "should destroy a users profile when the user is destroyed" do
# using the class Artist seems wrong to me, what if I change my factories?
user = Factory(:user)
profile = user.profile
lambda {
user.destroy
}.should change(Artist, :count).by(-1)
end
评论/其他想法
如用户规范中的注释所述,使用Artist似乎很脆弱。如果我的工厂将来发生变化该怎么办?
也许我应该使用factory_girl回调并定义“艺术家用户”和“音乐家用户”?感谢所有输入。