簡體   English   中英

rails helper方法如何:attribute_changed? 在Rails 3.2.15中有效嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM