2010-05-22 51 views
1

我有3個相關的表格。 用戶,訂單和可視對象Rails - 通過has_many查找信息的邏輯:通過需要!

想法是每個用戶都有很多訂單,但同時每個用戶都可以查看屬於其他用戶的特定其他訂單。所以Viewables具有user_idorder_id的屬性。

訂單有着 :has_many :Users, :through => :viewables

是否有可能通過做訂單的視圖中找到? 因此,像

@viewable_orders = Orders.find(:全部:條件=> [ 「?Viewable.user_id =」 1])

拿到訂單,其通過USER_ID是可見的列表= 1。 (這不起作用,否則我不會問。:() 這個想法是我可以做一些類似於側欄的東西,當前用戶(登錄的用戶)可以查看其他人的訂單列表,他可以查看 例如

其他三個用戶誰有一些訂單,他可以查看應最終顯示是這樣的:

  1. 插孔(2)
    • 基本定單(REGISTRY_ID:1 )
    • 新訂單(registry_id:29)
  2. 艾米(4)
    • 短訂單(REGISTRY_ID:12)
  3. 吉爾(5)
    • 硬件令(14)
    • 粉紅令(17)
    • 軟件訂單(76)

(括號中的數字是各自USER_ID或REGISTRY_ID)

因此,要找到所有的訂單,目前用戶可以找到的列表(假定當前用戶的user_id是1),將被發現做

@viewable_orders = Viewable.find(:all, :conditions => ["user_id=?", 1]) 

而這會給我上述6個註冊表的集合。現在,最簡單的方法是爲我提供一份清單

+ Jill's Hardware Order 
+ Jill's Pink Order 
+ Amy's Short Order 
+ etc 

但是,對於長列表來說,這會變得很難看。

謝謝!

回答

1

你應該設置has_many:通過關聯,不僅在訂單模型上,而且在用戶上。正如你已經有has_many :orders協會用戶,你可以給你關聯的另一名稱,例如,viewable_orders:

class User < ActiveRecord::Base 
    has_many :orders 
    has_many :viewables 
    has_many :viewable_orders, :through => :viewables, :source => :order 
end 

class Viewable < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :order 
end 

class Order < ActiveRecord::Base 
    belongs_to :user 
    has_many :viewables 
    has_many :users, :through => :viewables 
end 

然後用可以使用user.viewable_orders讓所有訂單特定用戶可以查看

+0

這工作! :D 我沒有意識到如何使用':source'參數,直到你解釋它爲止。感謝堆! :d – 2010-05-22 10:09:21