我的情况是SELECT *
FROM yourtable
WHERE INSTR(col_a,col_b,1)>0
OR INSTR(col_b,col_a,1)>0
or INSTR(substr(col_a,2,length(col_a)), col_b,1)>0
or INSTR(substr(col_b,2,length(col_b)), col_a,1)>0
属于CourseSession
,属于Course
。在我的控制器中,我想从CourseSession中获取程序的名称。我一直在环顾四周,并且看到很多人建议使用Program
方法。不幸的是,这对我来说不起作用。我收到这个错误:
joins
我做错了什么?
Can't join 'CourseSession' to association named 'program'; perhaps you misspelled it?
@sessions = if params[:program]
CourseSession.joins(:course).joins(:program).where("program.name = params[:program]")
else
CourseSession.all
end
答案 0 :(得分:0)
有点不清楚你想做什么。您的代码建议您想要:
CourseSessions
存在,则{li> Program
与params[:program]
相关联,
CourseSessions
不存在,则全部为params[:program]
。在这种情况下,我相信你会做类似的事情:
@sessions = if params[:program]
CourseSession.where(course: Course.where(program: Program.find_by(name: params[:program])))
else
CourseSession.all
end
答案 1 :(得分:0)
当您使用CourseSession.joins(:course).joins(:program)
(即链接连接)时,您只是加入course_sessions
表和courses
表和programs
表,因此出错。
您可以使用以下语法实现您所要求的内容:
CourseSession.joins(course: :program)
此处,courses
和programs
表是内连接的,course_sessions
和courses
表是内连接的。
第二个问题在于您的where
方法。表名是按惯例复数,因此您应该使用programs.name
而不是program.name
。请尝试以下方法:
CourseSession.joins(course: :program).where("programs.name = ?", params[:program])