У меня есть приложение Rails 3.1 со следующими двумя моделями.
class Listing < ActiveRecord::Base
has_many :listing_saves
end
class Team < ActiveRecord::Base
has_many :listing_saves
has_many :saved_listings, through: :listing_saves, source: 'listing'
end
Модель соединения выглядит так
class ListingSave < ActiveRecord::Base
belongs_to :team
belongs_to :listing
end
Я думаю, что есть проблема перегиба, потому что всякий раз, когда я пытаюсь запустить свои тесты, я получаю следующую ошибку (это пример ошибки и теста, который ее вызвал)
it "should return the listing saves associated with the team" do
save = Factory :listing_save, listing: @listing, saver: @user, team: @team
@team.listing_saves.should include save
end
Failures:
1) Team listing_saves associations should return the listing saves associated with the team
Failure/Error: @team.listing_saves.should include save
NameError:
uninitialized constant Team::ListingSafe
# ./spec/models/team_spec.rb:55:in `block (3 levels) in <top (required)>'
как будто Rails объединяет listing_saves
в listing_safe
Вот несколько нестандартных инфлекторов, которые я пробовал (не все одновременно) (ни один из них не работает)
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.plural 'saved_listing', 'saved_listings'
inflect.singular 'saved_listings', 'saved_listing'
inflect.plural 'listing_save', 'listing_saves'
inflect.singular 'listing_saves', 'listing_save'
inflect.singular 'listing_safes', 'listing_safe'
inflect.plural 'listing_safe', 'listing_safes'
inflect.irregular 'listing_save', 'listing_saves'
inflect.irregular 'saved_listing', 'saved_listings'
end
Что я могу сделать дальше?
Примечание. Я нашел похожий вопрос, но ответ, похоже, не решает мою проблему. проблема
Изменить Я следовал приведенному ниже ответу, так что теперь у меня есть следующее в моем config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'listing_save', 'listing_saves'
end
Когда я открываю консольный сеанс и запускаю "listing saves".singularize
, я получаю "listing_save", как я и надеялся. Однако похоже, что по крайней мере часть моего приложения его не понимает, мои тесты по-прежнему терпят неудачу так же, как и раньше. (Клянусь, я перезапущу свой сервер и spork, прежде чем тестировать/запускать приложение!).
Редактировать 2 Я написал несколько тестов на перегибы в своем приложении:
describe "inflection" do
it "should singularize listing_saves properly" do
"listing_saves".singularize.should == "listing_save"
end
it "should pluralize listing_save properly" do
"listing_save".pluralize.should == "listing_saves"
end
end
Теперь у меня есть ситуация, когда эти тесты проходят нормально, но другие тесты по-прежнему терпят неудачу с той же ошибкой, что и раньше.
NameError:
uninitialized constant User::ListingSafe
То же приложение, тот же экземпляр spork, загружены те же файлы. Здесь происходит что-то странное!??