0

我对 Merit & Devise 有一个棘手的问题。当一个成员创建一个帐户(第一个成员)时,他会得到一个徽章,如下面的规则所示。非常适合他。

grant_on 'members/registrations#create', badge: 'WelcomeIn', model_name: 'Member'

如果我注销并创建另一个成员进行测试,则会创建第二个成员,但我在服务器日志中有一个回滚(见下文)。然后没有其他 Merit 规则适用于第二个成员,但 Merit steel 适用于第一个成员......

实在不明白,折腾了一个下午都没解决。。。

简而言之,当它工作时,我在日志中有:

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

我注销并创建另一个成员进行测试。该成员已创建,但我在服务器日志中有一个回滚(见下文)。然后 Merit 停止为他(第二个成员)工作,但 Merit 为第一个工作......

实在不明白,折腾了一个下午都没解决。。。

注册控制器

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

编辑和解决方案

如果您有一个名称不是“用户”的设计模型(例如我的成员),则必须在 Merit 文档设置之后在控制器中添加一行(见下文)。

注册控制器

class Members::RegistrationsController < Devise::RegistrationsController

  # POST /resource
  def create
    @user = build_resource # Needed for Merit
    @member = @user
    super
  end

感谢@TuteC 的支持。

4

1 回答 1

1

@user = build_resource控制器中的行之后,添加@member = @user. @user在您有配置寻找的优点的同时设计需要@member

于 2018-05-24T03:19:27.877 回答