В действии #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: в "блоке инициализации"

Почему происходит ошибка и как я могу ее устранить?

РЕДАКТИРОВАТЬ

Эта проблема была решена путем:

  1. Добавьте имя модели в grant_on: имя_модели: 'Выбор' (в случае)
  2. Проверьте, что переменная экземпляра имеет " @ ". Было 'selection = Selection.new(selection_params) ' => ' @selection = Selection.new(selection_params) '.

1 ответ

Решение

Он переводит имя контроллера в название модели, но пространство имен контроллера Member, Попробуйте добавить опцию model_name: "Selection" на ваш grant_on линия.

Другие вопросы по тегам