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

时间:2013-05-08 14:04:29

标签: ruby-on-rails ruby-on-rails-3 activerecord

我在命名空间中有两个模型,一个服务和一个教师,两者之间有很多对多的关系,通过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的表,它与命名空间一致。

1 个答案:

答案 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})