С моделью, в которой имя совпадает с множественным числом, `has_many::through` не работает в одном направлении
Я создаю приложение для генерации персонажа для RPG Star Wars. Я добавил Species
модель. Species
такое же единственное число, как и множественное число, что бросает меня в петлю. Я могу заставить маршруты нормально работать в приложении, используя species_index_path
, но по какой-то причине has_many :characteristics, :through => :species_characteristics
не работает в одном направлении.
Например, у меня есть две модели, которые правильно посеяны (и работают) в консоли: Characteristics
а также Species
, Characteristics
настроен следующим образом:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, :through => :species_characteristics
has_many :skills
end
Species
настроен следующим образом:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, :through => :species_characteristics
end
Модель между ними просто имеет belongs_to
для каждого из них.
Если я позвоню Characteristic.first.species
из консоли я получаю список видов, связанных с этой характеристикой.
Если я позвоню Species.first.characteristics
Однако я получаю следующее:
NameError: uninitialized constant Species::Characteristics
Я смотрю на добавление нового перегиба, или как-то иначе, но я ничего не придумываю. У кого-нибудь есть лучший способ, кроме переименования модели в нечто вроде Race?
TLDR:
has_many
отношения не работают только в одном направлении из-за неинициализированной постоянной ошибки, вероятно, из-за перегиба. Есть ли способ исправить это, кроме переименования модели?
1 ответ
После нескольких часов возни с этим я разобрался в проблеме. Я удалил все дополнительные изменения, внесенные в файл inflections.rb, чтобы он выглядел так:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.uncountable %w( species )
end
Затем я проверил и дважды проверил все модели, чтобы убедиться, что синтаксис правильный, отношения имеют смысл и тому подобное. Оказывается, я использовал has_many :species, :through => :species_characteristics
когда это должно было быть has_many :species, through: :species_characteristics
, Однажды я исправил эти проблемы в моделях видов и характеристик и сделал reload!
в консоли все заработало.
Характеристическая модель:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, through: :species_characteristics
end
Модель вида:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, through: :species_characteristics
end
Видовая характеристика:
class SpeciesCharacteristic < ActiveRecord::Base
belongs_to :characteristic
belongs_to :species
end
Так заканчивается террор этого вопроса.