[英]How does rails helper method :attribute_changed? works in Rails 3.2.15?
這是我需要的情況:如果用戶的電子郵件已更改,則生成用戶確認代碼
我有型號:
class User < ActiveRecord::Base
...
after_update :generate_confirm_code if :email_changed?
...
def generate_confirm_code
self.confirmation_code = SecureRandom.urlsafe_base64.first(8)
self.confirmed = false
end
def update_last_visit
self.last_visit = Time.now.utc
save
end
...
end
還有一個方法:application_controller中的update_last_visit,它可以節省用戶上次訪問時間
class ApplicationController < ActionController::Base
...
def update_last_visit
current_user.update_last_visit if current_user
end
...
end
這是問題的開始:每次我重新加載頁面我的確認碼都會改變,即使我沒有更改電子郵件。 似乎更新last_visit也會更改confirmation_code,但為什么呢?
您的after_update
宏上的語法略有錯誤。 就像你現在一樣, if :email_changed?
實際上只是在加載User類時是否運行after_update
宏的修飾符。 即puts "hi" if :some_condition?
它與puts "hi" if :some_condition?
( if
不是這里puts
方法的輸入)。
你想要的是將一個:if
選項傳遞給after_update
宏,如下所示:
after_update :generate_confirm_code, if: :email_changed?
請注意, if:
現在根植於after_update
宏的options散列中。
另請參閱ActiveRecord回調的Rails指南 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.