我有一个案例模型。此案例模型具有客户端和对手字段。 他们都是人物模型。一个案件只有一个客户和一个对手。现在一个人可以是一个客户,也可以是一个对手,一个人可以有很多案件。 如何在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 cases
。person_id
= 3
现在这必须是客户ID或对手ID
感谢您的帮助
答案 0 :(得分:0)
当您询问Client.first.cases
时,在此查询Active Record中,您希望获取属于Person表的第一条记录(id为3)的所有案例。
person_id
为client_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
而且我会得到所有情况,这个人就是客户。
我仍然不知道,如何得到案件,这个人是谁的对手