2012-07-26 79 views
1

如何在用戶創建設計帳戶時創建額外記錄?設計:在用戶創建時創建額外記錄

使用用戶和團隊模型之間的HABTM關聯,我試圖創建一個用戶在那裏創建帳戶的團隊。

下面是我嘗試使用的代碼。

class RegistrationsController < Devise::RegistrationsController 
    def create 
    super 
    current_user.teams.create(:name => 'User Name') 
    end 
end 

我也試過這種

class RegistrationsController < Devise::RegistrationsController 
def create 

    build_resource 

     if resource.save 
     resource.teams.create(:name => 'User Name') 
     if resource.active_for_authentication? 
      set_flash_message :notice, :signed_up if is_navigational_format? 
      sign_in(resource_name, resource) 
      respond_with resource, :location => after_sign_up_path_for(resource) 
     else 
      set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format? 
      expire_session_data_after_sign_in! 
      respond_with resource, :location => after_inactive_sign_up_path_for(resource) 
     end 
     else 
     clean_up_passwords resource 
     respond_with resource 
     end 
    end 
end 

回答

1

您可以使用before_save在你的模型是這樣的:

class User < ActiveRecord::Base 
    # ... your code ... 
    after_create :set_user_on_team 
    # ... your code ... 
    private 
    def set_user_on_team 
     teams.create(:name => username) 
    end 
end 

在這裏看到的文檔:http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks

+0

這看起來並不像它還會在用戶那支球隊 – 2012-07-26 13:18:30

+0

這將創建一個團隊的名稱是用戶名而所有者是用戶。這是你想要的嗎? – Dougui 2012-07-26 13:22:23

+0

對不起,我的意思是它看起來不會創建用戶和團隊之間的關聯 – 2012-07-26 13:27:47

4

我解決了這個通過改變routes.rb指向定製控制器。

的routes.rb

devise_for :users, 
      :controllers => { :registrations => "registrations" } 

registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 
    def create 
    super 
    resource.teams.create(:name => 'User Name')  
    end 
end 
+0

你是如何知道創建對象的「資源」? – ForgetfulFellow 2014-10-21 06:57:28

+0

我知道這個資源是用於用戶的,因爲我在'devise_for:users'中指定了它 – 2014-10-26 06:48:33