我正在研究一个允许用户将图像与特定事件相关联的应用程序。事件由用户拥有。简单的解决方案当然是:Rails数据建模 - 交替到has_many:通过,给定多态?
class Image < ActiveRecord::Base
belongs_to :event
end
class Event < ActiveRecord::Base
has_many :images
belongs_to :user
end
class User < ActiveRecord::Base
has_many :events
has_many :images, :through => :events
end
除了!有一个问题。我还希望我的用户能够直接拥有图像,而无需中间事件。如果我在这里使用“常规”多态关联,那么显然user.images
将无法正常工作。我是否应该握住我的鼻子,使用:as => :event_images
来消除歧义,并定义user.all_images
是否需要这种需求?我是否应该拥有由用户直接拥有的所有图像,并且可以选择与某些事件相关联? (当然,有一个验证来确保一致性......但这看起来有点臭。)有没有第三种解决方案比这两种方法都更漂亮?