Как показано ниже, я думаю, что эта настройка в порядке:

class Location < ActiveRecord::Base
  has_many :traders
  has_many :servicelocations
  has_many :services, through: :servicelocations
end

class Service < ActiveRecord::Base
    has_many :servicelocations
    has_many :locations, through: :servicelocations
end

class ServiceLocation < ActiveRecord::Base
    belongs_to :location
    belongs_to :service
end

class Trader < ActiveRecord::Base
  belongs_to :location
end

Проблема в том, что я все еще получаю uninitialized constant error.

Я заметил, что когда я создал модель ServiceLocation, funky rails magic создал service_location.rb, но я не уверен, а) это ли проблема и б) как ее исправить, если это так.

1
JonleePeakman 17 Май 2014 в 11:18

2 ответа

Лучший ответ

Я считаю, что твоя ошибка возникла из-за этого

class Service < ActiveRecord::Base
    has_many :servicelocations
    has_many :locations, through: :servicelocations
end

Это должно быть так

class Service < ActiveRecord::Base
    has_many :service_locations
    has_many :locations, through: :service_locations # notice the underscore
end

Имя вашего класса модели - ServiceLocation, а в соответствии с соглашением о рельсах для этого - service_location не servicelocation

И здесь также вы должны изменить

class Location < ActiveRecord::Base
  has_many :traders
  has_many :service_locations
  has_many :services, through: :service_locations
end
1
zishe 5 Июн 2014 в 07:33

Полагаю, рубин понимает servicelocations как одно слово, поэтому вам нужно изменить модель на Servicelocation или изменить ассоциацию на service_locations. Второй способ, я думаю, лучше, он будет примерно таким:

class Location < ActiveRecord::Base
  has_many :traders
  has_many :service_locations
  has_many :services, through: :service_locations
end

class Service < ActiveRecord::Base
  has_many :service_locations
  has_many :locations, through: :service_locations
end
1
zishe 23 Май 2014 в 20:36