Rails - 通过has_many查找信息的逻辑:通过需要!
问题描述:
我有3个相关的表格。 用户,订单和可视对象Rails - 通过has_many查找信息的逻辑:通过需要!
想法是每个用户都有很多订单,但同时每个用户都可以查看属于其他用户的特定其他订单。所以Viewables具有user_id
和order_id
的属性。
订单有着 :has_many :Users, :through => :viewables
是否有可能通过做订单的视图中找到? 因此,像
@viewable_orders = Orders.find(:全部:条件=> [ “?Viewable.user_id =” 1])
拿到订单,其通过USER_ID是可见的列表= 1。 (这不起作用,否则我不会问。:() 这个想法是我可以做一些类似于侧栏的东西,当前用户(登录的用户)可以查看其他人的订单列表,他可以查看 例如
其他三个用户谁有一些订单,他可以查看应最终显示是这样的:
- 插孔(2)
- 基本定单(REGISTRY_ID:1 )
- 新订单(registry_id:29)
- 艾米(4)
- 短订单(REGISTRY_ID:12)
- 吉尔(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
让所有订单特定用户可以查看
这工作! :D 我没有意识到如何使用':source'参数,直到你解释它为止。感谢堆! :d – 2010-05-22 10:09:21