在使用Devise创建第二个User后,Merit会停止工作

时间:2018-05-19 19:07:25

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

我有一个棘手的问题Merit&设计。 当会员创建一个帐户(第一个会员)时,他会获得一个徽章,就像下面的规则一样。适合他的作品。

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

如果我log_out并为测试创建另一个成员,则会创建第二个成员,但我在服务器日志中有一个Rollback(见下文)。然后没有其他Merit规则适用于第二个成员,但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

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

我真的不明白,下午没花钱解决了......

registrations_controller

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

EDIT&amp;解

如果你的设计名称不是&#39;用户&#39; (就像我的会员一样),你必须在Merit doc设置之后在你的Controller中添加一行(见下文)。

registrations_controller

class Members::RegistrationsController < Devise::RegistrationsController

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

感谢@TuteC的支持。

1 个答案:

答案 0 :(得分:1)

在控制器中的@user = build_resource行之后,添加@member = @user。设置好@user时,设计需要@member