【问题标题】:Gioco gamification gemGioco 游戏化宝石
【发布时间】:2024-01-18 05:48:01
【问题描述】:

我正在尝试使用Gamification Gioco Gem。我能够安装 Gem。但是,当我尝试创建徽章时,出现以下错误。随着我深入,它似乎失败了

kind = Kind.find_or_create_by(name: 'hr') in the gioco.rake.rb 

这是包含更多详细信息的完整日志

rake --trace gioco:add_badge[explorer,0,hr,true]
** Invoke gioco:add_badge (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute gioco:add_badge

rake aborted! 
undefined method `find_or_create_by' for #<Class:0x007ff9546bb778>
/Users/satya/gamification/gameclient/lib/tasks/gioco.rake:36:in `eval'
(eval):1:in `block (2 levels) in <top (required)>'
/Users/satya/gamification/gameclient/lib/tasks/gioco.rake:36:in `eval'
/Users/satya/gamification/gameclient/lib/tasks/gioco.rake:36:in `block (2 levels) in <top    (required)>'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:236:in `call'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:236:in `block in execute'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:231:in `each'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:231:in `execute'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:175:in `block in invoke_with_call_chain'
/Users/satya/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:168:in `invoke_with_call_chain'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/task.rb:161:in `invoke'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/application.rb:149:in `invoke_task'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/application.rb:106:in `each'
/Users/satya/.rvm/gems/ruby-1.9.2-p320/gems/rake-10.1.1/lib/rake/application.rb:106:in `block in top_level'

我正在使用rails 3.2.16。我想知道是否其他人在Rails 3.x环境中使用过。

谢谢 萨提亚

【问题讨论】:

    标签: ruby-on-rails gem rake


    【解决方案1】:

    Rails 3.2 似乎不再支持 find_or_create_by。

    Rails 3.2 的推荐方法是使用 first_or_create、first_or_create!、first_or_initialize 方法。所以从

    更改代码
    badge_string = "kind = Kind.find_or_create_by(name: '#{args.kind}').first_or_create! \n"
    

    badge_string = "kind = Kind.where(name: '#{args.kind}').first_or_create! \n"
    

    克服了这个问题。但是,请注意 Gioco Gem 用户,其设置脚本似乎存在一些问题。未创建积分、徽章、级别的 ID,您也会收到 mass_assignment 错误。不确定是否积极支持此 gem。

    【讨论】: