我正在构建一个 Rails 3 应用程序。我将尽力并尽可能简洁地描述此应用程序。
此应用程序中的两种主要模型类型是:
- 用户
- 企业
还有另外两个模型:
- 类别
- 子类别(嵌套在 类别)
他们的合作方式是:企业可以拥有(或者属于)任意数量的类别(以及任何相关的子类别)。
用户可以选择要“关注”的类别,即他们选择要在其 Feed 中显示的类别,属于这些类别的任何企业都将显示在 Feed 中(与子类别相同)
需要注意的是,类别和子类别仅由管理员决定,用户/企业无法添加/销毁类别,只能遵循现有类别
我的实现方案是创建一个具有以下属性的“以下”模型
- 用户 ID
- followable_id
- followable_type
其中有两个“followable_types”:用户和业务。正如您所看到的,这是一个不完全多态的模型。
我遇到麻烦的是方法。例如,我如何创建属于用户所关注类别的所有企业的列表?这需要一些棘手的查询和大量的黑客技术。这让我相信我从错误的角度解决了这个问题。
有人可以引导我走向正确的方向吗?也许我的架构需要一些改进。或者给我一个关于我应该如何编写我的方法的提示。
谢谢!!
最佳答案
考虑到您将定期执行的查询,我可能会在这种情况下取消多态性并执行以下操作:
class Customer < ActiveRecord::Base
has_and_belongs_to_many :categories
end
class Business < ActiveRecord::Base
has_and_belongs_to_many :categories
end
class Categories < ActiveRecord::Base
has_and_belongs_to_many :customers
has_and_belongs_to_many :businesses
end
那么执行您建议的查询的代码非常简单:
Business.joins(:categories).where('categories.id IN (?)', a_user.categories.map(&:id))
关于ruby-on-rails - Rails 3 App, "following"不同类型的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469472/