我正在使用ROR應用程序,並且在設計和密碼確認方面遇到困難。我希望我的用戶能夠編輯他們的信息(姓名,地址等),而不必輸入並確認他們的密碼(這是除非他們決定更改密碼,在這種情況下,這些字段是必需的。 )允許用戶在不保存密碼的情況下編輯帳戶並將條件傳遞給:reject_if在Ruby中
我在設計時做了一些閱讀,我發現這是一個常見問題。不幸的是,我嘗試了在設計GitHub倉庫上發佈的所有解決方案,但無法解決我的問題。
但是,我發現了一種解決方法,但是我希望這將是最後一步。以下是對我的players.rb
文件看起來像一個小片段(我有兩個賬戶設定的 - 球員和老闆):
has_one :account, :as => :profile
accepts_nested_attributes_for :account, :reject_if => proc { |attributes| attributes['password'].blank? }
我accounts.rb
文件看起來像這樣:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :invited_by, :invited_by_id
,因爲它的設置現在,玩家可以編輯他們的個人資料,而不必輸入密碼,除非他們正在編輯密碼字段 - 這是非常好的,而且是我期望的結果。但是,我遇到了一個小障礙......即使在創建新帳戶(玩家)時,:reject_if => proc { |attributes| attributes['password'].blank? }
也會執行!這意味着如果玩家沒有輸入密碼,而不是提示他輸入密碼,那麼應用程序就會剎車!
我需要一些幫助來編寫一個if語句或者一些基本上只會觸發reject_if
條件(如果該帳戶屬於註冊(現有)玩家的條件)。
我曾嘗試::reject_if => proc { |attributes| attributes['password'].blank? unless Player.new}
和
if Player.new
accepts_nested_attributes_for :account
else
accepts_nested_attributes_for :account, :reject_if => proc { |attributes| attributes['password'].blank? }
end
我似乎無法想出解決辦法,所以我決定,看是否有人能夠提供的意見或建議。與往常一樣,我非常感謝您的時間和您可能提供的任何幫助。謝謝!
很抱歉,這是行不通的。這是由設計通過GitHub提供的相同的代碼...我試過這個,不幸的是,它並沒有做到這一點。 – 2012-01-09 13:57:02
我得到以下錯誤:「未定義的局部變量或方法'resource_class'」。我錯過了什麼嗎? – 2012-01-09 14:07:05
我猜你正在使用一些舊版本的設計,試着安裝最新版本的設計。意味着刪除Gemfile.lock,然後捆綁安裝。 – 2012-01-10 06:04:04