在#create action

时间:2018-05-07 09:41:11

标签: ruby-on-rails ruby-on-rails-5 merit-gem

我正在尝试为名为“选择”的第一个创建操作设置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)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   [优点]没有找到目标:未初始化的常数成员::选择。 /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'   在211ms内完成500内部服务器错误(视图:2.8ms | ActiveRecord:134.4ms)

     

NoMethodError(未定义的方法`member'表示true:TrueClass):

     

app / models / merit / badge_rules.rb:53:在`block in initialize'

为什么会发生错误以及如何解决?

修改

这个问题通过以下方式解决:

  1. 在grant_on:model_name上添加模型名称:'Selection'(在这种情况下)
  2. 检查实例变量是否为“@”。 'selection = Selection.new(selection_params)'=> '@selection = Selection.new(selection_params)'。

1 个答案:

答案 0 :(得分:2)

它将控制器名称转换为模型名称,但控制器使用Member命名空间。尝试将选项model_name: "Selection"添加到grant_on行。