作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的reports_controller.rb 中有这个方法,它允许用户发送状态。
def send_status
date = Date.today
reports = current_user.reports.for_date(date)
ReportMailer.status_email(current_user, reports, date).deliver
head :ok
rescue => e
head :bad_request
end
最佳答案
稍后我将解决检查报告是否已发送的问题,但首先我将讨论如何从 ActiveAdmin 调用 Controller 操作的问题。
您可以调用ReportsController#send_status
通过创建 ActionController::Base::ReportsController
然后调用所需的方法,例如
ActionController::Base::ReportsController.new.send_status
app/controllers/reports_controller.rb
:
class ReportsController < ApplicationController
... # rest of controller methods
def send_status
if current_user # or whatever your conditional is
ReportMailer.status_email(current_user).deliver
response = :ok
else
response = :bad_request
end
head response
end
end
app/models/user.rb
:
class User < ActiveRecord::Base
... # rest of user model
def reports_for_date(date)
reports.for_date(date)
end
end
app/mailers/reports_mailer.rb
class ReportsMailer < ActionMailer::Base
... # rest of mailer
def status_email(user)
@user = user
@date = Date.today
@reports = @user.reports_for_date(@date)
... # rest of method
end
end
User
模型有一个 bool 列
status_sent
并且用户拥有唯一的电子邮件地址。
lib/status_sent_mail_observer.rb
:
class StatusSentMailObserver
self.delivered_email(message)
user = User.find_by_email(message.to)
user.update_attribute(:status_sent, true)
end
end
config/intializer/setup_mail.rb
:
... # rest of initializer
Mail.register_observer(StatusSentMailObserver)
Status
属于
User
的型号.每次用户发送电子邮件时都可以创建状态模型,让您可以通过检查是否存在状态记录来检查电子邮件是否已发送。我会认真考虑采用这种策略,而不是简单的
status_sent
柱子。
ActionController::Base::ReportsController.new.send_status
& 实现一个观察者来更新跟踪状态的用户列。但你真的不想那样做。像我上面提到的那样研究重构。
关于ruby-on-rails - 如何从 ActiveAdmin 调用 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491443/
我是一名优秀的程序员,十分优秀!