1

我有一个案例模型。这个案例模型有一个客户和一个对手字段。它们都是 Person 模型。一个案件​​只有一个客户和一个对手。现在,一个人可以是客户,也可以是对手,一个人可以有很多情况。我如何在 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 查询是: --new 当然我的意思是
Person.first.cases--
因为我没有客户表,所以我在 Case 表中的 id 称为 client_id 或对手ID

选择cases.* 从cases哪里casesperson_id= 3

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

感谢帮助

4

2 回答 2

0

当您询问时Client.first.cases,在此查询 Active Record 中,您希望获取属于 Person 表的第一条记录(id 为 3)的所有案例。 person_idclient_id,因为您的 person 表中的第一个客户的 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

谢谢。

于 2013-07-30T16:12:47.837 回答
0

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

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

所以在我不能使用的 Person 对象上person.cases,我会得到所有的情况,这个人是客户。
我还是不知道,怎么拿到案子,对方是哪里人

于 2013-07-30T20:44:44.293 回答