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
我已经被这个问题困扰太久了。
第一次使用 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