2011-03-29 60 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