Неопределенный метод RoR `attr_accessible' после любого редактирования кода

Я внедряю отличный плагин, который я нашел для присуждения баллов/значков/званий пользователям на основе поведения пользователей. Он называется Merit, и его можно найти здесь: https://github.com/tute/merit.

У меня есть две модели: «Пост» и «Тег». Ассоциации таковы: посты имеют много тегов, теги принадлежат посту.

Я начисляю баллы пользователям, когда они создают «Пост». Я настраиваю плагин для начисления очков всякий раз, когда вызывается действие «создать» контроллера сообщений.

Проблема:

Когда я запускаю сервер, я выполняю свой процесс создания нового сообщения с любыми связанными тегами. Это работает отлично. Он будет работать отлично, пока я каким-либо образом не отредактирую свой код (в контроллере или модели). После редактирования при попытке создать новый пост я получаю эту ошибку:

undefined method `attr_accessible' for Merit::Action:Class

Кажется, не имеет значения, какое редактирование я делаю, если я изменяю основное содержимое файла (это включает простое добавление оператора отладки «помещает»). На данный момент я вообще больше не могу создавать сообщения, так как каждая попытка создать сообщение будет приводить к одной и той же ошибке. Затем, как только я перезапущу WEBrick, он снова заработает (пока я снова не отредактирую код).

Что здесь происходит? Почему простое редактирование моего кода приводит к тому, что атрибут attr_accessible внезапно становится неопределенным в подключаемом модуле Merit, пока я не перезапущу свой сервер?


person joncslee    schedule 04.01.2013    source источник
comment
Вы используете rails_admin? У меня была такая же проблема с rails_admin   -  person Matthew Hui    schedule 04.01.2013
comment
Нет, я не использую rails_admin. Как вы решили свою?   -  person joncslee    schedule 04.01.2013
comment
Моя проблема заключалась в том, что посещение /admin вызывало эту ошибку. Я добавил config.excluded_models ‹‹ Merit::Action в свой инициализатор rails_admin, но к вам это не относится.   -  person Matthew Hui    schedule 04.01.2013
comment
какую версию рельсов вы используете? Я думаю, что автор модифицировал merit для поддержки Rails4. Надеюсь, вы знаете, что Rails4 больше не поддерживает attr_accessible и использует строгие параметры вместо этого. Если это проект rails3, либо обновите версию rails до 4, либо используйте protected_attributes gem, чтобы временно это исправить.   -  person VenoM    schedule 29.07.2013


Ответы (1)


Кажется, это проблема перезагрузки класса ruby.

Я думаю, что ваш плагин не перезагружается вместе с файлами, которые вы изменяете, поэтому поведение драгоценного камня не повторно внедряется в новый код. Когда вы перезапускаете сервер rails, код приложения и код гема синхронизируются, и поведение гема может быть внедрено в код приложения.

Имеет ли это смысл?

person DaniDoni    schedule 21.08.2013