【发布时间】:2015-01-11 04:19:52
【问题描述】:
面临@user.reset_token 返回 nil 的问题。
app/views/user_mailer/password_reset.html.erb
<%= link_to "Reset password", edit_password_reset_url(@user.reset_token, email: @user.email) %>
Reset_token 是在 User 模型中声明的,当我尝试使用 sidekiq worker 时会出现这个问题。参考下面的代码。
app/models/user.rb
class User < ActiveRecord::Base
attr_accessor :reset_token
def User.new_token
SecureRandom.urlsafe_base64
end
def send_password_reset_email
PasswordResetWorker.perform_async(self.id)
end
private
def create_reset_digest
self.reset_token = User.new_token
update_attribute(:reset_digest, User.digest(reset_token))
update_attribute(:reset_sent_at, Time.zone.now)
end
app/workers/password_reset_worker.rb
class PasswordResetWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform(user_id)
user = User.find(user_id)
UserMailer.password_reset(user).deliver
end
end
app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default from: "noreply@example.com"
def password_reset(user)
@user = user
mail to: user.email, subject: "Password Reset"
end
end
当我不使用工人时,这个问题不会发生
app/models/user.rb
def send_password_reset_email
UserMailer.password_reset(self).deliver
end
想知道我可以用什么替换“@user.reset_token”?如果您需要更多信息,请告诉我。提前致谢。
【问题讨论】:
-
密码重置功能根据railstutorial.org/book/account_activation_password_reset构建。我只想为此添加sidekiq。
标签: ruby ruby-on-rails-4 actionmailer sidekiq attr-accessor