2016-01-09 27 views
1

after_create我有這樣的代碼在我的用戶模型軌與色器件

class User < ActiveRecord::Base 
    after_create :set_user_full_name 
    ......... 
private 

    def set_user_full_name 
    self.name = "Test name" 
    end 
end 

但是當我創建了一個用戶名屬性是零。我試圖添加名稱到

創建和更新強參數,但沒有運氣。

devise_parameter_sanitizer.for(:sign_up) << [:name] 
devise_parameter_sanitizer.for(:account_update) << [:name] 

任何幫助將不勝感激!

回答

2

after_create將用戶數據插入分貝後執行回調。

在您的代碼中,name未實際插入。

user = User.create(some_attiributes) 
user.name  #=> "Test name" 

user.reload 
user.name  #=> nil 

如果要插入名稱屬性,請使用before_create回調。
它插入

更新之前指定名稱值:

如果用戶有first_namelast_name屬性,

before_create :set_user_full_name 

def set_user_full_name 
    self.name = "#{first_name} #{last_name}" 
end 

但是如果用戶沒有first_namelast_name屬性,你應該處理的控制器。

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :set_name_param, only: [:create] 

    private 
    def set_name_param 
    params[:user][:name] = "#{params[:user][:first_name]} #{params[:user][:last_name]}" 
    end 
end 
+0

謝謝,實際上是woke。但是,我有註冊形式的'firstname'和'lastname'屬性,並且我的計劃是將這兩個屬性連接起來以成爲'name'屬性。我應該怎麼做? 再次感謝:) – fardin

+1

我更新了答案!它是粗略的代碼,有點理解的理解。 –