很抱歉,如果之前有人询问过。我是ActiveRecord的新手,并且在rails世界之外使用远程遗留sqlserver数据库。这就是设置2个表的方法
**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'
我是否正确设置了一切或者我错过了什么?
答案 0 :(得分:0)
这应该做的工作
Student.joins(:status_code).where('LookupStatusCode' => {Name: 'Studying science'})
<强>更新强>
作为替代方案,您还可以使用arel。
构建查询首先,您需要将include ArelHelpers::ArelTable
添加到StatusCode
模型中。
然后,您将能够构建以下查询
Student.joins(:status_code).where(StatusCode['Name'].eq('Studying science'))