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 で表示可能な注文のリストを取得します。(これは機能しません。それ以外の場合は質問しません。:( ) 現在のユーザー (ログインしているユーザー) が他の人の注文のリストを表示できるサイドバーのようなものを実行できるという考えです。たとえば、

表示できる注文を持っている他の 3 人のユーザーは、最終的に次のように表示されます。

  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

次に、user.viewable_orders特定のユーザーが表示できるすべての注文を取得するために使用できます

于 2010-05-22T07:49:00.703 に答える