RoR Devise - 在用户创建后创建相关的新对象

RoR Devise - create related new object after User creation

我已经被这个问题困扰太久了。

第一次使用 Devise,我尝试根据参数中是否存在邀请令牌,将新用户注册与自动加入组结合起来。 (例如,电子邮件邀请加入群组,因此当他们注册 link 并完成注册后,他们将自动成为受邀群组的成员)

按照教程,我已经能够自定义 Devise 控制器,当存在邀请令牌时成功创建用户,但是我无法使用新用户对象的 ID 创建组成员资格 - 成员资格创建成功,添加了 group_id,但 user_id 始终为零。

下面是我定制的Devise控制器,以及相关型号:

class Users::RegistrationsController < Devise::RegistrationsController

  def create

    super do
      newUser = User.create(resource_params)
      token = params[:invite_token]

      if token != nil
        group = Invite.find_by_token(token).group
        newUser.groups.push(group)
        Membership.create(:user_id => newUser.id, :group_id => group.id)
      end
    end

  end

end



class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end


class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable

  has_many :memberships
  has_many :groups, :through => :memberships
  has_many :gifts
  has_many :posts
  has_many :votes
  has_many :invitations, :class_name => 'Invite', :foreign_key => 'recipient_id'
  has_many :sent_invites, :class_name => 'Invite', :foreign_key => 'sender_id'
end


class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :invites
  has_many :gifts
  has_many :posts
  has_one :user
end

有谁知道在创建用户后我如何能够成功创建包含 User_id 和 Group_id 的成员对象?

提前谢谢大家,

调用 super 将创建用户。将块传递给接受新创建的 resource/user 的 super 调用并创建成员资格:

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super do |user|
      token = params[:invite_token]

      if token.present?
        invite = Invite.find_by_token(token)

        if invite.present?
          Membership.create(user_id: user.id, group_id: invite.group.id)
        end
      end
    end
  end
end

这里有一个例子:http://www.rubydoc.info/github/plataformatec/devise/#Configuring_controllers