2014-02-12 58 views
1

環境:Rails 4,Devise 3.2.2
鑑於我爲我的設計模型添加了兩個字段(名稱,職業)。
當我註冊時
然後我在數據庫中看到新列不受影響。

下面是我的控制器和模型類設計:註冊後沒有保存自定義字段

#custom controller 
class UsersController < Devise::RegistrationsController 
    before_action :configure_permitted_parameters 

    #devise's controller extensions 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) do |u| 
     u.permit(:name, :email, :profession, :password, :password_confirmation) 
    end 
    end 
end 

#Devise Model 
class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
      :recoverable, :rememberable, :trackable, :validatable 
    attr_accessor :name, :profession 
    validates :name, presence: true 
    validates_uniqueness_of :email, :name 
end 

我指定能想出正確運行,並使用我的自定義控制器。
我還檢查在params哈希表,它包括新的字段值,你可以看到:

Processing by UsersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"F3AjMd1/EpYvuhckEMPUkiMZ1szHa6ba7OMbjjSltOk=", "user"=>{"name"=>"test", "email"=>"[email protected]", "profession"=>"prof", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Save"} 

而下方則是生成的sql:

INSERT INTO "users" ("created_at", "email", "encrypted_password", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 11 Feb 2014 15:14:56 UTC +00:00], ["email", "[email protected]"], ["encrypted_password", "$2a$10$Bn3LIldBUDPHKO0vrXd7peVz6q/42hOrCOcqdbvBMHVeEtn4EfKma"], ["updated_at", Tue, 11 Feb 2014 15:14:56 UTC +00:00]] 

其中包含未加新領域。

任何暗示都會受到歡迎,我被困了一個多小時。

+0

我得到了同樣的問題,任何人都知道爲什麼? – fuyi

回答

2

刪除此行從你的模型:

attr_accessor :name, :profession 

這是壓倒一切已經activer記錄提供的存取你遷移你的模型,並添加這些字段後。這導致他們不被保存到數據庫。

+0

非常感謝!它現在完美。我不知道這個事實。 – ismael

+0

如果從模型中刪除attr_accessor,則表單助手不能引用這些屬性。 – fuyi

+0

@xiaopang這是不正確的。 :name和:profession已經是該模型的字段,在這種情況下不需要attr_accessor。 Attr_accessor僅用於虛擬屬性,這些屬性不是。 – DiegoSalazar

相關問題