Конструкция
У меня есть модель User, которая принадлежит профилю через полиморфную ассоциацию. Причина, по которой я выбрал этот проект, можно найти здесь. Подводя итог, есть много пользователей приложения, которые имеют действительно разные профили.
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, я не уверен, как объявить ассоциацию наиболее эффективным способом.
Первая попытка
factories.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 кажется хрупким. Что делать, если мои заводы меняются в будущем?
Возможно, мне следует использовать заводские обратные вызовы и определить "пользователь-художник" и "музыкант-пользователь"? Весь ввод оценивается.