class A < ActiveRecord::Base
has_one :b, class_name: "Something::B"
end
module Something
class B < ActiveRecord::Base
end
end
假设上面的类结构具有实际表名 a
和 something_b
,我想创建以下 SQL 查询。
SELECT "a".* FROM "a"
INNER JOIN "something_b" ON
"something_b"."a_id" = "a"."id"
WHERE "something_b"."some_column" = "some_value" LIMIT 1
我尝试了一些类似的东西
A.joins(:b).find_by(b: { some_column: 'some_value' })
但是结果查询如下,在 WHERE
子句中有 "b"
而不是 "something_b"
。
SELECT "a".* FROM "a"
INNER JOIN "something_b" ON
"something_b"."a_id" = "a"."id"
WHERE "b"."some_column" = "some_value" LIMIT 1
有没有办法不明确指定表名,如下所示?
A.joins(:b).find_by(something_b: { some_column: 'some_value' })
最佳答案
如果您的模型名称和表名称不匹配 rails
约定,即最简单的形式 table_name = SomeClass.name.pluralize.downcase
,那么您需要在模型中定义实际的表名。
module Something
class B < ActiveRecord::Base
self.table_name = 'something_b'
end
end
以上更改应该在生成的查询中选择正确的表名。
关于sql - rails : join query on association with class_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934255/