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

时间:2016-03-09 10:46:15

标签: ruby ruby-on-rails-3 devise

我一直坚持这个问题已经太久了。

首次使用Devise,我试图根据params中是否存在邀请令牌,将新用户注册与组的自动加入相结合。 (例如,加入群组的电子邮件邀请,因此当他们按照注册链接并完成注册时,他们将自动成为受邀群组的成员)

按照教程,我可以自定义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的Membership对象?

提前谢谢大家,

1 个答案:

答案 0 :(得分:1)

super的调用将创建用户。将块传递给接受新创建的资源/用户的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