1

我有 3 个相关的表格。用户、订单和可视项

这个想法是每个用户都有许多订单,但同时,每个用户都可以查看属于其他用户的特定其他订单。所以 Viewables 具有 和 的user_id属性order_id

订单有一个 :has_many :Users, :through => :viewables

是否可以通过订单的视图进行查找?所以像

@viewable_orders = Orders.find(:all, :conditions => ["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

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

谢谢!

4

1 回答 1

1

您应该设置 has_many :through 关联不仅在订单模型上,而且在用户上。由于您已经有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

然后使用 canuser.viewable_orders获取特定用户可以查看的所有订单

于 2010-05-22T07:49:00.703 回答