2011-07-20 23 views
0

ここで少し混乱しています。 ユーザー チケットhas_manyとbelongs_toの関連で混乱しています

  • チケットは「レポーター」として1人のユーザーに属している:私は2つのモデルがあります。
  • チケットは、1人のユーザーに「割り当て済み」として属します。

  • ユーザー(?2回)、多くのチケットを持っている

だからここに私が持っているもの:

# Table name: tickets 
# 
# id    :integer   not null, primary key 
# label   :string(255) 
# content  :text 
# reported_by_id :integer 
# assigned_to_id :integer 
# created_at  :datetime 
# updated_at  :datetime 
# 
class Ticket < ActiveRecord::Base 
    belongs_to :reported_by, :class_name => 'User' 
    belongs_to :assigned_to, :class_name => 'User' 
end 

# Table name: users 
# 
# id   :integer   not null, primary key 
# login  :string(255) 
# password :string(255) 
# created_at :datetime 
# updated_at :datetime 
# 
class User < ActiveRecord::Base 
    has_many :tickets, :class_name => 'Ticket', :foreign_key => 'reported_by_id' 
    has_many :tickets, :class_name => 'Ticket', :foreign_key => 'assigned_to_id' 
end 

私は "aUser.tickets" を実行し、すべてのユーザのを取得したいと思い彼が報告したチケット。

助けが必要ですか? Thx!

答えて

1

あなたのUserモデルであなたにhas_manyの名前を区別する必要があります

class User < ActiveRecord::Base 
    has_many :reported_by_tickets, :class_name => 'Ticket', :foreign_key => 'reported_by_id' 
    has_many :assigned_to_tickets, :class_name => 'Ticket', :foreign_key => 'assigned_to_id' 
end 

は今そうしないと

@user.reported_by_tickets 
@user.assigned_to_tickets 

を呼び出して、あなたのコードは、ターゲットを右に見えます。

+0

それは動作します! Thx a lot :) –

+0

実際には、「ビルド」コマンドが正しく動作していません。 aUser.reported_by_tickets.build()は動作しますが、 "reported_by_id"フィールドは設定されていません。何か案が ? –

+0

うーん、これは間違いなく正しく動作するはずです - attr_accessibleなど、これを防ぐモデルがありますか? – ghayes

1

基本的に、2つの異なるリレーションの異なるプロパティと2つのリレーションシップを組み合わせた第3のメソッドが必要です。

class User < ActiveRecord::Base 
    has_many :reported_tickets, :class_name => 'Ticket', :foreign_key => 'reported_by_id' 
    has_many :assigned_tickets, :class_name => 'Ticket', :foreign_key => 'assigned_to_id' 

    def tickets 
    reported_tickets + assigned_tickets 
    end 
end 
+0

はい、ヒントのthx! –

関連する問題