And*_*rew 4 activerecord ruby-on-rails associations ruby-on-rails-3
我正在开发一个包含大量照片的应用程序,这些照片由用户提供.照片共享方面是该应用的主要目的.
有时,创建照片的精选"收藏集"会很有帮助.所以,在ActiveRecord中这很容易:Collection has_many :photos
和Photo belongs_to :collection
.
我的问题是,对于不属于特殊收藏品的"普通"照片,我应该:
A.根本没有它属于任何集合.即:photo.collection == nil
-要么-
B.创建一个包含每张照片的通用"社区集".即默认情况下photo.collection == 'Community'
我也在考虑这是否应该是HABTM关系.
反馈将非常感谢!
这取决于你对未收集的照片要做什么,真的.如果您希望能够使用用于显示集合的相同操作显示未收集的照片,那么您将希望拥有该通用集合.否则,我会把它留下来; 我不喜欢将"种子"数据与用户数据混合在同一个表格中(您将使用"未收集的"集合进行) - 在重新播种时很容易意外删除用户数据.
它应该是HABTM关系吗?同样,取决于您想如何使用它.如果您很有可能希望照片属于多个集合,那就去吧.
我在这里提到的事情我不会这样做:添加一个'ptype'属性来告诉单身人士收集的照片(浪费数据库空间 - 你已经可以通过调用得到这些信息photo.collection_id.nil?
); 并且使用多态模型(你不希望单例照片的行为完全不同,我想,所以这增加了复杂性,几乎没有任何好处).
但是,命名范围是一个好主意,如果你没有"未收集"的集合来找到你的单身人士,它将特别有用:
#Apologies for the Rails 2.3 code - it's what I know...
named_scope :singletons, {:conditions => {:collection_id => nil}}
Run Code Online (Sandbox Code Playgroud)
或者HABTM版本:
named_scope :singletons, lambda {
{:conditions => ['NOT EXISTS (SELECT * FROM collections_photos WHERE photo_id = ?)', self.id]}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
归档时间: |
|
查看次数: |
169 次 |
最近记录: |