我在命名空间中有两个模型,一个服务和一个教师,两者之间有很多对多的关系,通过has_and_belongs_to_many定义:
class Scheduling::Service < ActiveRecord::Base
has_and_belongs_to_many :instructors
end
class Scheduling::Instructor < ActiveRecord::Base
attr_accessible :first_name, :last_name
has_many :instructor_availabilities
scope :of_service, lambda { |service_id| joins(:services).where(:services => {:id => service_id})}
has_and_belongs_to_many :services, :class_name => "Scheduling::Service"
end
在of_service范围内,我希望of_service返回与服务关联的所有教师。
但是,运行此范围时,出现错误:
的ActiveRecord :: StatementInvalid: PG ::错误:错误:缺少表“服务”的FROM子句条目 第1行:......“id”=“instructors_services”。“service_id”WHERE“服务”...... ^ :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“services”。“id”= 107 LIMIT 1
它似乎出错的地方是它加入了一个名为instructors_services的表(该表不存在),忽略了相关模型中的命名空间。它应该加入一个名为scheduling_instructors_services的表,它与命名空间一致。
答案 0 :(得分:4)
尝试将: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})