Merit gem を使用して Rails アプリにバッジ システムを実装しようとしています。
アプリの最初の 100 人のユーザーにバッジを贈りたいです。そこで、このコードを Badge_rules.rb に追加します
grant_on 'registrations#create', badge: 'Pioneer', model_name: 'User', to: :itself do |user|
user.id < 101
end
Devise (バージョン 3.2.3) を使用しているので、このHowtoに従い、次のように登録コントローラーをオーバードライブしました。
class RegistrationsController < Devise::RegistrationsController
def create
@user = build_resource # Needed for Merit
super
end
def update
@user = resource # Needed for Merit
super
end
end
しかし、バッジは作成されていません。ログには、次の警告があります。
[merit] no target_obj found on Rule#applies?
[merit] No object found, maybe you need a '@registration' variable in 'registrations_controller'?
gem の rule.rb ファイルに binding.pry を入れましたが、明らかです。target_obj はユーザーではなく、nil です。
target_obj は、badges_rules.rb の to: オプションで設定されるはずです。だから私は:itself、:user、そして何も試しませんでしたが、それは私の問題を解決しません。
もちろん@registration = build_resource
、コントローラーに追加しようとしましたが、警告は消えましたが、問題は解決しませんでした。
別のバッジの動作はちょっと間違っています。登録に成功した人には誰でも付与されるはずです。作業コードは次のとおりです。
grant_on 'registrations#create', badge: 'Inscription', model_name: 'User'
しかし、私がしなければならなかったとき: :itself to it, @TuteCが別の質問で私にアドバイスするように、それはうまくいきません。
to: パラメータの動作がよくわかりません。