0

我有 2 张桌子:“演员”和“角色”。每个表都有一个名为“种族”的列。一个演员只能有 1 个种族,但一个角色可以有 1 个或多个种族。

例如,假设我想在下面找到所有符合 Actor1 种族的角色:
Actor1 - 种族:' Asian' Role1 -
种族:'Asian'
Role2 - 种族:['Asian','Caucasian']

这个查询:

Role.where{(ethnicity.eq my{actor.ethnicity})}

将拉起 Role1,但不会拉起 Role2。我的问题是如何构造一个查询,在这个例子中会拉起 Role1 和 Role2?

我试过做:

Role.where{(ethnicity.in my{actor.ethnicity})}

但这似乎不起作用。

这个怎么做?

4

1 回答 1

0

要问的第一个问题是如何将种族数组存储在角色模型上?它是一个序列化的列吗?如果是这样,如果您要经常询问种族,那么您最好建立一个 has_many 关系。

您的问题似乎是您正在针对可能是数组字符串的值查询字符串。根据您对上述问题的回答,解决方案可能会有所不同。

一种选择是反转你的

Role.where{(ethnicity.in my{actor.ethnicity})}

成为

Role.where{(actor.ethnicity.in my{ethnicity})}

因为这里的数组是角色的种族,而不是演员的种族。现在我不是 100% 熟悉squeel,但这是我基于所涉及的基本逻辑的答案。

于 2014-03-24T15:02:58.510 回答