5

Я создаю приложение для создания персонажа для RPG Star Wars. Я добавил модель Species. Species - это то же единственное число, что и множественное число, которое бросает меня за цикл. Я могу заставить маршруты работать нормально в приложении, используя species_index_path, но по какой-то причине has_many :characteristics, :through => :species_characteristics не работает в одном направлении.С моделью, где имя одного и того же сингла, как множественное число, `has_many,: through` не работает в одном направлении

Например, у меня есть две модели, которые правильно загружены (и работают) в консоли: 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

Возможно, связано с [Rails: Обработка лесов, таких как «Овцы», которые имеют одинаковую множественную и единственную форму] (http: // stackoverflow.com/questions/7489054/rails-handling-a-scaffolding-such-as-aep-that-have-the-same-plural-and-sin) – sawa

+1

это кажется ошибкой для меня; подумайте о том, чтобы сообщить о [проблемах с Rails] (https://github.com/rails/rails/issues), если он еще не существует – mdesantis

+1

И это: http://underpop.free.fr/r/ruby-on -rails/cookbook/I_0596527314_CHP_2_SECT_6.html – sawa

ответ

3

После нескольких часов работы с этим я понял проблему. Я удалил любые дополнительные изменения, которые я сделал в файл 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 

SpeciesCharacteristic Модель:

class SpeciesCharacteristic < ActiveRecord::Base 
    belongs_to :characteristic 
    belongs_to :species 
end 

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