Модель User
, которая имеет множество Contact
. Post
s и Image
s могут быть опубликованы до Contact
с по ContactPublishment
.несколько has_many-through в одну и ту же полиморфную таблицу, но с разным исходным классом, не работают в тестах, но работают в действительности
User
имеет методы visible_posts
и visible_images
, чтобы обеспечить легкий доступ к Post
с и Image
с опубликованными в.
Проблема заключается в том, что в то время как user.visible_images
и user.visible_posts
работы отлично, функции, которые полагаются на эти отношения сходят с ума:
Если удаление либо тест на visible_images
или visible_posts
из спецификации, остальные тесты проходят. если я оставлю оба, второй не удастся. Я могу переключить порядок тестов, но 2-й из них не удался. странно, да?
Это пример кода, с помощью Rails 3.2.15:
class User < ActiveRecord::Base
...
has_many :visible_posts, through: :contact_publishments, source: :publishable, source_type: 'Post'
has_many :visible_images, through: :contact_publishments, source: :publishable, source_type: 'Image'
end
class Contact < ActiveRecord::Base
...
belongs_to :represented_user, class_name: User.name
has_many :contact_publishments
end
class ContactPublishment < ActiveRecord::Base
...
belongs_to :contact
belongs_to :publishable, polymorphic: true
end
class Post < ActiveRecord::Base
...
has_many :contact_publishments, as: :publishable, dependent: :destroy
has_many :contacts, through: :contact_publishments
end
class Image < ActiveRecord::Base
...
has_many :contact_publishments, as: :publishable, dependent: :destroy
has_many :contacts, through: :contact_publishments
end
describe User do
...
it "#visible_images" do
user = create :user
image = create :image
image.contacts << create(:contact, represented_user: user)
user.visible_images.should == [image]
end
it "#visible_posts" do
user = create :user
post = create :post
post.contacts << create(:contact, represented_user: user)
user.visible_posts.should == [post]
end
end