2011-07-20 164 views
0

我在這裏有點困惑。我有2種型號: 用戶 票務困惑has_many和belongs_to協會

  • 工單屬於一個用戶的「記者」。
  • 票證屬於一個用戶爲「分配」。

  • 用戶有多少票(兩次?)

所以在這裏我已經有了:

# 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

你應該區分你的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很多:) –

+0

實際上,「構建」命令無法正常工作。做一個User.reported_by_tickets.build()工作,但不設置「reported_by_id」字段。任何想法 ? –

+0

嗯,這絕對應該正常工作 - 你的模型中是否有任何可以防止這種情況的東西,比如attr_accessible? – ghayes

1

基本上,你需要不同的屬性爲兩個不同的關係和第三種方法結合起來。

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的提示! –