2011-03-29 57 views
2

我正在构建一个rails 3应用程序。我会尽力以尽可能简洁的方式来描述这个应用程序。Rails 3应用程序,“跟随”不同类型的模型

的两种主要类型的在此应用程序的型号有:

  • 用户
  • 企业

然后还有另外两个车型:

  • 分类
  • 小类(嵌套在内个类别)

它们如何协同工作的是:企业可以有(或属于,而)尽可能多的类别,因为他们喜欢(和任何相关的子类别以及)。

用户可以选择类别“跟随”,即他们选择,他们希望在他们的饲料露面的类别,并且属于这些类别的任何商家会在饲料中显示(同与子类)

重要的是要注意的是,类别和子类别将由管理员来决定而已,用户/企业不能添加/销毁类别的,只要按照现有的

很重要

我如何实施这一计划是建立一个“以下”型号具有以下属性

  • user_id说明
  • followable_id
  • followable_type

其中将有两个 “followable_types”:用户和业务。正如你所看到的,这是一个不太完美的多态模型。

我遇到麻烦的地方就是方法。例如,我将如何创建属于用户所关注类别的所有业务的列表?这将需要一些棘手的查询和大量的骇客。这让我相信我正从错误的角度接近问题。

有人可以引导我走向正确的方向吗?也许我的架构需要一些工作。或者给我一个暗示,我应该如何写我的方法。

谢谢!

+0

我也很困惑。用户可以关注类别和子类别吗?如果是这样,那么你的模型是正确的,但可跟随的类型将是“类别”或“子类别”,它是一个典型的用户和“可跟随”之间的多态关系。 – 2011-03-29 09:58:15

+0

最大你有它。其followable_id而不是category_id的原因是因为用户也可以跟踪子类别。它不是多态的,因为它的类别不属于任何一个模型(因为企业和用户都可以拥有类别)。如果我感到困惑,我很抱歉。 – goddamnyouryan 2011-03-29 16:47:21

回答

3

鉴于你会定期进行,我可能会在这种情况下,多态性做掉,并完成类似查询:

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)) 
+0

谢谢!你能解释这部分代码:a_user.categories.map(&:id))?我之前看到过这个,而我认为这是一种快捷方式,我不确定它究竟意味着什么。 – goddamnyouryan 2011-03-29 16:44:52

+0

@Ryan Max它在所有类别对象上调用.id,并将结果作为数组返回。你可以用任何属性来做到这一点,例如,如果你有一群人,只想要一个他们的名字数组,你可以这样做:names = people.map(&:name)。这相当于做people.map {| p | p.name} – Ant 2011-03-30 08:21:41

+0

太棒了,谢谢Ant!我结束了与许多:通过关系,这基本上是完全一样的。 – goddamnyouryan 2011-03-30 18:19:45