У меня есть приложение rails, которое использует гем FriendlyId, и недавно я начал получать NoMethodErrors при разработке и тестировании. Эта проблема началась только недавно, и мы делаем несколько итераций в проекте («постановка», которая на герою все еще работает).
Проблема возникает при создании новой записи любой модели, настроенной для дружественных идентификаторов. Вот одна из тех моделей:
class Playlist < ActiveRecord::Base
attr_accessible :title, :drill_tokens, :program, :order , :get_playlists
validates_presence_of :title
validates_uniqueness_of :title
has_many :playlist_items, :dependent => :destroy, :order => :id
has_many :drills, :through => :playlist_items
attr_reader :drill_tokens
attr_reader :get_playlists
def drill_tokens=(ids)
self.drill_ids = ids.split(",")
end
has_friendly_id :title, :use_slug => true
end
Я получаю сообщение об ошибке при запуске теста NoMethodError в PlaylistsController # create Текст сообщения об ошибке:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
И здесь начинается трассировка:
friendly_id (3.2.1.1) lib/friendly_id/active_record_adapter/slug.rb:53:in `enable_name_reversion'
activesupport (3.0.7) lib/active_support/callbacks.rb:415:in `_run_save_callbacks'
Я подтвердил, что он связан с гемом friendly_id, поскольку закомментировал строку has_id и вызов create снова работает. Я также попробовал связанные задачи рейка:
работает
rake friendly_id:redo_slugs MODEL=playlist
выдает мне ту же ошибку. Альтернативно, запустив down-миграцию на таблице слагов и повторно запустив rails g friendly_id и up -igration, затем запустив
rake friendly_id:make_slugs MODEL=playlist
полностью убивает таблицу, и с тех пор просто попробуйте плейлист # Действие show вызывает ту же ошибку.
Надеюсь, это достаточно подробно. Я полностью сбит с толку относительно того, как вернуться в рабочее состояние.