sql - rails : join query on association with class_name

标签 sql ruby-on-rails ruby-on-rails-4 activerecord

class A < ActiveRecord::Base
  has_one :b, class_name: "Something::B"
end

module Something
  class B < ActiveRecord::Base
  end
end

假设上面的类结构具有实际表名 asomething_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/

相关文章:

sql - "IN"函数有反面吗?

css - 如何将 bool 值与 Bootstrap 导航选项卡一起使用?

ruby-on-rails-4 - Rails 引擎 4.2 中的 Rake 任务失败快速 gem 警告 : already initialized constant STATS_DIRECTORIES

ruby-on-rails - 范围内的 find_by 正在触发 2 个查询

mysql - 如何根据表中的十六进制值查找标志(int)值?

mysql - SQL统计那些过期的

python - Django 相当于 Rails 的 x.days.from_now

ruby-on-rails - 如何从IP地址中找出用户所在的国家和城市?

sql - Oracle 程序与 MS 程序与 Oracle 程序包

ruby-on-rails - Ruby on Rails 安装 Ubuntu 14.04 LTS---gem install rails 错误