В действии #create цель не найдена
Я пытаюсь установить badge_rule для первого действия создания с именем "Выбор" (выбор продукта членами).
Правило:
приложение / модель / заслуга /badge_rules.rb
grant_on 'member/selections#create', badge: 'FirstSelection', to: :member do |selection|
selection.member.selections.count == 1
end
Контроллер "Выборы" находится в папке "member": controllers / member / selections_controller.rb
В действии #create вот мое сообщение об ошибке:
Merit:: Action Load (0,4ms) ВЫБРАТЬ "merit_actions".* FROM "merit_actions" ГДЕ "merit_actions". "Processing" = $1 [["processing", "f"]] (0,2 мс) НАЧАТЬ SQL (0,4 мс) ОБНОВЛЕНИЕ "merit_actions" SET "обработано" = $1, "updated_at" = $2 ГДЕ "merit_actions". "Id" = $3 [["обработано", "t"], ["updated_at", "2018-05-07 09:35:24.776028"], ["id", 30]] (0,5 мс) COMMIT [заслуга] цель не найдена: неинициализированная константа Member::Selection. /Users/youguild/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/merit-3.0.1/lib/merit/base_target_finder.rb:13:in `find'Завершено 500 Внутренний сервер Ошибка в 211мс (Просмотров: 2.8мс | ActiveRecord: 134.4мс)
NoMethodError (неопределенный метод `member'для true: TrueClass):
app / models / merit /badge_rules.rb: 53: в "блоке инициализации"
Почему происходит ошибка и как я могу ее устранить?
РЕДАКТИРОВАТЬ
Эта проблема была решена путем:
- Добавьте имя модели в grant_on: имя_модели: 'Выбор' (в случае)
- Проверьте, что переменная экземпляра имеет " @ ". Было 'selection = Selection.new(selection_params) ' => ' @selection = Selection.new(selection_params) '.
1 ответ
Он переводит имя контроллера в название модели, но пространство имен контроллера Member
, Попробуйте добавить опцию model_name: "Selection"
на ваш grant_on
линия.