我有这样的代码:
def self.by_vibe(vibe_id)
self.joins(:vibes).where(vibes: {id: vibe_id})
end这段代码在我的模型中重复(有一些不同),例如:
def self.by_music(music_id)
self.joins(:musics).where(musics: {id: music_id})
end我有四到五个这样的东西,我只想做一个,然后拿出这样的东西(作为参考,hash包含{:vibes=>2}):
def self.by(hash)
self.joins(hash.keys.first).where(hash.keys.first.to_s => id = hash.values.first)
end我的self.by_vibe提出了以下查询:
SELECT "bcls".* FROM "bcls" INNER JOIN "bcls_vibes" ON "bcls_vibes"."bcl_id" = "bcls"."id" INNER JOIN "vibes" ON "vibes"."id" = "bcls_vibes"."vibe_id" WHERE "vibes"."id" = $1 [["id", 2]]我的第二种方法是:
SELECT "bcls".* FROM "bcls" INNER JOIN "bcls_vibes" ON "bcls_vibes"."bcl_id" = "bcls"."id" INNER JOIN "vibes" ON "vibes"."id" = "bcls_vibes"."vibe_id" WHERE "bcls"."vibe_id" = 2我怎样才能修正where子句?注意,第一个(正确的是WHERE "vibes"."id" = $1 [["id", 2]],而错误的是WHERE "bcls"."vibe_id" = 2 )。它要求换一张桌子。
发布于 2015-04-24 18:11:23
我刚刚找到了正确的方法来做我想做的事。
def self.by(hash)
self.joins(hash.keys.first).where(hash.keys.first.to_s => {id: hash.values.first})
end发布于 2015-04-24 17:25:17
您可以获得第一个值以及第一个键:
def self.by(hash)
self.joins(hash.keys.first).where(
{ hash.keys.first.to_s => { id: hash.values.first } }
)
end但是,如果您只接受散列中的一个键值对,则最好为by设置两个参数
def self.by(assoc, obj_id)
self.joins(assoc).where(assoc => { id: obj_id })
endhttps://stackoverflow.com/questions/29853633
复制相似问题