ruby-on-rails - Rails 3 App, "following"不同类型的模型

标签 ruby-on-rails polymorphism

我正在构建一个 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/

相关文章:

ruby-on-rails - 自动删除 Amazon S3 中超过 n 天的对象(如何?)

ruby-on-rails - 在 ActiveRecord 中使用 habtm 进行双重连接

javascript - 执行RoR中通过ajax请求返回的javascript

c++ - 模板函数以外的 OCaml 多态性示例?

ruby-on-rails - 在为 rspec 测试禁用回调后,如何重新启用回调?

ruby-on-rails - 如何为数据库字段创建顺序唯一 ID

c# - 如何判断 MemberInfo 是否表示覆盖

c++ - C++中的消息多态性

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

c++ - 一元 - 使用友元函数重载运算符