我正在尝试为名为“Selection”(成员选择产品)的第一个创建操作设置一个 badge_rule。
规则 :
app/models/merit/badge_rules.rb
grant_on 'member/selections#create', badge: 'FirstSelection', to: :member do |selection|
selection.member.selections.count == 1
end
控制器“选择”在文件夹“成员”中:controllers/member/selections_controller.rb
在#create 操作中,这是我的错误报告:
Merit::Action Load (0.4ms) SELECT "merit_actions".* FROM "merit_actions" WHERE "merit_actions"."processed" = $1 [["processed", "f"]] (0.2ms) BEGIN SQL (0.4ms) UPDATE "merit_actions" SET "processed" = $1, "updated_at" = $2 WHERE "merit_actions"."id" = $3 [["processed", "t"], ["updated_at", "2018-05-07 09: 35:24.776028"], ["id", 30]] (0.5ms) 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(未定义的方法“成员”为真:TrueClass):
app/models/merit/badge_rules.rb:53:in `block in initialize'
为什么会发生错误,我该如何解决?
编辑
此问题已通过以下方式解决:
- 在 grant_on 上添加模型名称:model_name: 'Selection' (在这种情况下)
- 检查实例变量是否带有“@”。是 'selection = Selection.new(selection_params) ' => ' @selection = Selection.new(selection_params) '。