2016-03-09 79 views
0

我一直在這個問題上停留太久了。RoR設計 - 創建用戶後創建相關的新對象

第一次使用Devise,我嘗試將新用戶註冊與組的自動加入相結合,基於params中存在的邀請令牌。 (例如,通過電子郵件邀請加入羣組,因此當他們關注註冊鏈接並完成註冊時,他們自動成爲受邀羣組的成員)

以下教程,我已經能夠自定義Devise控制器,但是我不能使用新用戶對象中的ID創建組成員資格 - 成功創建成員,並添加了group_id,但user_id始終保持爲零。

下面是我的定製設計的控制器,以及相關機型:

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,用戶創建後?

謝謝大家提前,

回答

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

+0

真棒,太感謝你了! –