gpt4 book ai didi

ruby-on-rails - Rails : If Foo has_many :bars, 做所有 :bars need to belong_to a Foo?

转载 作者:行者123 更新时间:2023-12-04 23:08:59 24 4
gpt4 key购买 nike

我正在开发一个包含大量照片的应用程序,这些照片由用户提供。照片共享方面是该应用程序的主要目的。

有时,创建精选的照片“收藏”会很有帮助。所以,这在 ActiveRecord 中很容易:Collection has_many :photosPhoto 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}}

或者 HABTM 版本:
named_scope :singletons, lambda {
{:conditions => ['NOT EXISTS (SELECT * FROM collections_photos WHERE photo_id = ?)', self.id]}
}

希望这可以帮助!

关于ruby-on-rails - Rails : If Foo has_many :bars, 做所有 :bars need to belong_to a Foo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com