由has_many和belongs_to关联混淆

时间:2011-07-20 20:31:25

标签: ruby-on-rails ruby-on-rails-3 associations

我在这里有点困惑。我有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”并获取他报告的所有用户的门票。

有任何帮助吗? 谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

否则,您的代码在目标上看起来正确。