С моделью, в которой имя совпадает с множественным числом, `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

Так заканчивается террор этого вопроса.

Другие вопросы по тегам