我正在尝试通过特定的表列来命令我的活动记录查询,但是使用标准的Query.order(:id)
格式,rails认为该列位于不同的表中。
这是我的有效记录查询:
@course = Course.select('*').joins(:course_metadata, :courseContent).where(course_id: params[:id]).order(:content_order)
以下是我的模特:
class Course < ActiveRecord::Base
has_one :course_metadata
has_many :xrefCourseContent, foreign_key: 'course_id'
has_many :courseContent, through: :xrefCourseContent, foreign_key: 'course_guid'
end
class CourseMetadata < ActiveRecord::Base
self.table_name = 'course_metadata'
belongs_to :course
end
class CourseContent < ActiveRecord::Base
self.table_name = 'courseContent'
has_many :xrefCourseContent, foreign_key: 'content_id', primary_key: 'content_id'
has_many :course, through: :xrefCourseContent, foreign_key: 'content_id',
end
class XrefCourseContent < ActiveRecord::Base
self.table_name = 'xrefCourseContent'
belongs_to :course, primary_key: 'course_id', foreign_key: 'course_guid'
belongs_to :courseContent, primary_key: 'content_id', foreign_key: 'content_guid'
end
查询通过外部参照表将课程连接到课程内容。
SELECT * FROM [courses]
INNER JOIN [course_metadata] ON [course_metadata].[course_id] = [courses].[course_id]
INNER JOIN [xrefCourseContent] ON [xrefCourseContent].[course_id] = [courses].[course_id]
INNER JOIN [courseContent] ON [courseContent].[content_id] = [xrefCourseContent].[content_id]
WHERE [courses].[course_id] = @0
ORDER BY [courses].[content_order]
这是在错误消息中显示的sql查询,正如您所看到的,它认为content_order
列位于courses
表中,而实际上它位于xrefCourseContent
中} table。
我是rails的新手,我仍在尝试围绕整个Active Record系统进行思考,请原谅我,如果我的模型中的某些代码是多余的或不必要的,但请随意指出任何可能得到改善。
答案 0 :(得分:1)
应该是
@course = Course.select('*').joins(:course_metadata, :courseContent)
.where(course_id: params[:id])
.order("xrefCourseContents.content_order")
您需要指定从中找到content_order
列的表格。