在Rails ActiveRecord中,连接在命名空间模型中不能与has_and_belongs_to_many一起使用

我在命名空间中有两个模型,一个服务和一个教师,两者之间有很多对多的关系,通过has_and_belongs_to_many定义:

class Scheduling::Service < ActiveRecord::Base has_and_belongs_to_many :instructors end class Scheduling::Instructor  {:id => service_id})} has_and_belongs_to_many :services, :class_name => "Scheduling::Service" end 

在of_service的范围内,我希望of_service返回与服务关联的所有教师。

但是,运行此范围时,我收到一个错误:

ActiveRecord :: StatementInvalid:PG ::错误:错误:表“服务”缺少FROM子句条目LINE 1:….“id”=“instructors_services”。“service_id”WHERE“services”… ^:SELECT “scheduling_instructors”。* FROM“scheduling_instructors”INNER JOIN“instructors_services”ON“instructors_services”。“instructor_id”=“scheduling_instructors”。“id”INNER JOIN“scheduling_services”ON“scheduling_services”。“id”=“instructors_services”。“service_id “WHERE”服务“。”id“= 107 LIMIT 1

似乎出错的地方是它加入了一个名为instructors_services的表(该表不存在),忽略了相关模型中的命名空间。 它应该加入一个名为scheduling_instructors_services的表,该表与命名空间一致。

尝试将:join_table => 'scheduling_instructors_services'到您的关系中,如下所示:

 has_and_belongs_to_many :instructors, :class_name => "Scheduling::Instructor", :join_table => 'scheduling_instructors_services' has_and_belongs_to_many :services, :class_name => "Scheduling:: Service", :join_table => 'scheduling_instructors_services' 

不,不应该

.where('instructors_services.id' => service_id)

代替

.where(:services => {:id => service_id})