2015-04-07 72 views
1

使用Rails 4.1和Devise 3.0.3時,如何在用戶實例化並連接兩者時在用戶上創建關聯對象?Rails的設計創建新用戶後創建一個相關的對象?

def User 
    has_one :case 
end 
def Case 
    belongs_to :user 
end 

在這種情況下,用戶使用devise進行設置。

我希望做的是實例,像這樣的對象:

@case = Case.new 
    current_user.case = @case 

current_user.case << @case 

我怎樣才能執行該代碼時,請求以「註冊新#」 ?

+0

很高興我能幫助亞當! –

回答

1

這是我將如何實現這一點:

class User < ActiveRecord::Base 

    ... 

    before_action :create_case, only: [:new, :create] 

    def create_case 
    case = Case.create 
    self.case = case.id 
    # Maybe check if profile gets created and raise an error 
    # or provide some kind of error handling 
    end 
end 
+0

這是如何工作的?在ActiveRecord中沒有before_action,是不是before_action控制器中可用的方法? –

0

您可以使用create方法您的用戶模型中。類似的事情是這樣的:

def self.create(username, email, pass) 
    user = User.new(:username => username, :email => email, :password => pass) 
    user.case = Case.new 
    return user if user.save 
end 
+0

如果devise/activerecord只是簡單定義並且不被任何地方調用,那麼devise/activerecord如何知道執行這個方法? –

1

覆蓋create的行動Devise::RegistrationsController並通過一個塊:

# app/controllers/registrations_controller.rb 

class RegistrationsController < Devise::RegistrationsController 
    def create 
    super do 
     resource.case = Case.new 
     resource.save 
    end 
    end 
end 
+0

如果我這樣做,我必須重新實現Devise RegistrationsController中的所有其他功能嗎? –

+0

不,你不知道。因爲它擴展了'Devise :: RegistrationsController'。或者你可以簡單地執行'def new super end'。 –

+0

資源是我應該使用的Devise變量嗎?或者你只是用它作爲例子? –

相關問題