class Account
has_many :metadata
class Keys
has_many :metadata
class Metadatum
belongs_to :key
belongs_ to :account
在Metadatum对象中,我会保留有关帐户的其他信息,以供“exapmle' age'。
在Key对象中,我保留有关Metadatum类型的信息。
Metadatum表:
密钥表:
我想通过多个元数据搜索帐户。例如
我的查询是:
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_id和值的Metadatum帐户。没有这样的Metadatum - 每个只有一个key_id和值。
什么是正确的查询?
答案 0 :(得分:1)
如果您想要符合这两个条件的帐户,我会尝试:
first = Account.joins(metadata: :key).where("keys.name = ? AND metadata.value = ?", params[:key], params[:value])
final = first.joins(metadata : :key).where("keys.name
= ? AND metadata.value = ?", params[:key1], params[:value1])
新尝试(非常难看:))
first_ids = Account.joins(metadata: :key).where("keys.name = ? AND metadata.value = ?", params[:key], params[:value]).pluck(“accounts.id”)
final = Account.where(id: first_ids).joins(metadata : :key).where("keys.name = ? AND metadata.value = ?", params[:key1], params[:value1])
答案 1 :(得分:0)
尝试以下
accounts.joins(metadata: :key)
.where("(keys.name = ? AND metadata.value = ?) OR
(keys.name = ? AND metadata.value = ?)",
params[:key], params[:value], params[:key1], params[:value1])