数据库关联,案例模型有两个人

时间:2013-07-30 15:54:41

标签: ruby-on-rails associations

我有一个案例模型。此案例模型具有客户端和对手字段。  他们都是人物模型。一个案件​​只有一个客户和一个对手。现在一个人可以是一个客户,也可以是一个对手,一个人可以有很多案件。 如何在rails中构建此关联?当我将Person模型分成一个客户端和一个对手模型时,它似乎很容易,但这对我来说似乎并不是很干燥。

这就是我现在所拥有的

class Person < ActiveRecord::Base
  has_many :cases 
end

class Case < ActiveRecord::Base
  belongs_to :client, class_name: 'Person'
  belongs_to :opponent, class_name: 'Person'
end

到目前为止,我可以将客户和对手添加到案例中。 但是我如何才能通过客户或对手找到所有案例?

---老
当我有Client.first.cases时,我的SQL查询是:
- 新
当然我的意思是Person.first.cases--因为我没有客户表,只是我在Case表中的id被称为client_id或opponent_id

SELECT cases。* FROM cases WHERE casesperson_id = 3

现在这必须是客户ID或对手ID

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

当您询问Client.first.cases时,在此查询Active Record中,您希望获取属于Person表的第一条记录(id为3)的所有案例。 person_idclient_id,因为您个人表中的第一个客户ID是3。

如果你要写:Client.first,在你的SQL查询中你会看到:

SELECT person.* FROM person WHERE person_id = 3

我认为,您应该尝试在Case模型中传递foreign_key约束,如下所示:

class Case < ActiveRecord::Base
  belongs_to :client, class_name: 'Person', foreign_key: "client_id"
  belongs_to :opponent, class_name: 'Person',foreign_key: "opponent_id"
end

感谢。

答案 1 :(得分:0)

(〜最后10分钟)http://www.youtube.com/watch?v=AhFK0UO9VPs
这里几乎解释了我的Person模型和Message模型的问题,其中Message Model有一个receiver_id和一个sender_id。
 在Case模型中不需要外键(回到我的问题),需要在Person模型中像这样

class Person < ActiveRecord::Base
   has_many :cases, foreign_key: "client_id"
end

所以在Person对象上我不能使用person.cases而且我会得到所有情况,这个人就是客户。
我仍然不知道,如何得到案件,这个人是谁的对手