【发布时间】:2018-04-06 16:46:33
【问题描述】:
class Account
has_many :metadata
class Keys
has_many :metadata
class Metadatum
belongs_to :key
belongs_ to :account
在 Metadatum 对象中,我保留了有关帐户的其他信息,例如“年龄”。
在 Key 对象中,我保留有关元数据类型的信息。
元数据表:
- 身份证
- key_id
- account_id
- 价值
键表:
- 姓名
- data_type
我想通过多个元数据搜索帐户。例如
- 值 = '18' 的元数据属于名称 = 'age' 的键
- 值 = 'John' 的元数据属于名称 = 'first_name' 的键
我的查询是:
accounts.joins(metadata: :key).where("keys.name = ? AND
metadata.value = ?", params[:key], params[:value]).where("keys.name
= ? AND metadata.value = ?", params[:key1], params[:value1])
这是错误的,因为在我看来,它会寻找一个具有包含 key_ids 和值的 Metadatum 的帐户。不存在这样的元数据——每个元数据只有一个 key_id 和 value。
什么是正确的查询?
【问题讨论】:
标签: sql ruby-on-rails postgresql ruby-on-rails-5