我一直坚持这个问题已经太久了。
首次使用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对象?
提前谢谢大家,
答案 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