【发布时间】:2016-12-12 22:00:33
【问题描述】:
对不起,如果以前有人问过这个问题。我是 ActiveRecord 的新手,并且正在使用 Rails 世界之外的远程旧版 sqlserver 数据库。两张表就是这样设置的
**Student** **LookupStatusCode**
Identifier(PK) StatusCodeId Id(PK) Code Name
1234 2 1 4 Studying maths
3456 1 2 6 Studying science
这就是我设置模型的方式
class Student < ActiveRecord::Base
self.table_name "Student" #use singular table name
belongs_to :status_code, foreign_key: 'StatusCodeId'
end
class StatusCode < ActiveRecord::Base
self.table_name "LookupStatusCode" #use singular table name
has_many :students
end
我如何找到所有学习科学的学生?
我试过-
Student.joins(:status_code).where(status_code: {Name: 'Studying science'})
但它似乎在 where 子句中使用 status_code.Name 而不是 LookupStatusCode.Name
这是它生成的 SQL。请注意,sql 的 WHERE 部分不使用覆盖的表名。
SELECT [student].* FROM [student] INNER JOIN [LookupStatusCode] ON [LookupStatusCode].[Id] = [student].[StatusCodeId] WHERE [status_code].[Name] = N'5'
我是否正确设置了所有内容或遗漏了什么?
【问题讨论】:
-
你能打印sql activerecord生成的内容吗?
Student.joins(:status_code).where(status_code: {Name: 'Studying science'}).to_sql -
能否请您提供控制台的所有 SQL 输出?你说它似乎在使用
status_code.Name,所以你应该得到一个 SQL 异常。试试Student.joins(:status_code).where(status_codes: {Name: 'Studying science'})。 -
@NikitaMisharin 这是 sql
"SELECT [student].* FROM [student] INNER JOIN [LookupStatusCode] ON [LookupStatusCode].[Id] = [student].[StatusCodeId] WHERE [status_code].[Name] = N'5'"。请注意 where 子句。似乎没有拿起表名 -
@fbelanger 仍然得到相同的 Invalid SQL 错误。请看我上面的sql。
标签: ruby-on-rails ruby activerecord