You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Merit在Devise创建第二个Member账号后失效问题及解决

Merit + Devise 自定义Member模型注册时规则失效的问题排查与解决

问题场景

我在使用Merit配合Devise实现会员注册徽章奖励功能时,遇到了一个棘手的问题:

  • 第一个Member账号注册时,能正常触发Merit规则获取WelcomeIn徽章,服务器日志显示更新正常
  • 注销后创建第二个测试Member时,账号虽然能成功创建,但服务器日志出现ROLLBACK,且该Member无法触发任何Merit规则,而第一个Member的Merit功能依然正常

日志对比

正常运行日志(第一个用户注册)

SQL (0.5ms) UPDATE "members" SET "sash_id" = $1, "updated_at" = $2 WHERE "members"."id" = $3 [["sash_id", 1], ["updated_at", "2018-05-19 17:15:30.716358"], ["id", 3]]

异常运行日志(第二个用户注册)

(0.1ms) ROLLBACK

原注册控制器代码

当时我的Devise注册控制器代码如下:

class Members::RegistrationsController < Devise::RegistrationsController
  # POST /resource
  def create
    @user = build_resource # Needed for Merit
    super
    if @member.persisted?
      MemberMailer.send_welcome(@member).deliver_now
      Notification.create!(category: "welcome", member: @member, topic: "Bienvenue sur MonApp !", checked: false)
    end
  end
end

问题根源与解决方案

经过排查发现,问题出在Devise模型不是默认的User而是自定义的Member,Merit在触发规则时无法正确识别对应的模型实例。只需要在控制器中添加一行代码,将@user赋值给@member即可解决问题:

修改后的注册控制器代码:

class Members::RegistrationsController < Devise::RegistrationsController
  # POST /resource
  def create
    @user = build_resource # Needed for Merit
    @member = @user
    super
  end
end

感谢@TuteC的帮助!


内容的提问来源于stack exchange,提问作者Gregdebrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:40