Rails - 通过has_many查找信息的逻辑:通过需要!

问题描述:

我有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 

但是,对于长列表来说,这会变得很难看。

谢谢!

你应该设置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