ruby-on-rails – 如何从ActiveAdmin调用控制器 *** 作?

ruby-on-rails – 如何从ActiveAdmin调用控制器 *** 作?,第1张

概述我在reports_controller.rb中有这个方法,它允许用户发送状态. def send_status date = Date.today reports = current_user.reports.for_date(date) ReportMailer.status_email(current_user, reports, 我在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调用 *** 作,以检查用户是否发送了此报告?我希望它像列上的status_tag或其他东西.
我应该采取会员行动吗?

谢谢!

解决方法 我将解决检查报告是否稍后发送的问题,但首先我将讨论如何从Activeadmin调用控制器 *** 作的问题.

虽然您可以通过创建ActionController :: Base :: ReportsController然后调用所需的方法来调用ReportsController#send_status,例如

ActionController::Base::ReportsController.new.send_status

这不是一个好主意.你可能应该重构这个来解决一些潜在的问题.

应用程序/控制器/ 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  endend

应用程序/模型/ user.rb:

class User < ActiveRecord::Base  ... # rest of user model  def reports_for_date(date)    reports.for_date(date)  endend

应用程序/邮寄者/ 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          endend

这显然可以进一步重构,但提供了一个不错的起点.

需要考虑的一件重要事情是此控制器 *** 作不是异步发送电子邮件,因此为了并发和用户体验,您应该强烈考虑使用排队系统.使用我提供的示例,DelayedJob将是一个简单的实现(查看DelayedJob RailsCast).

至于检查报告是否已发送,您可以实现ActionMailer Observer并注册该观察者:

这要求用户模型具有BOolEAN列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)  endend

配置/初始化器/为setup_mail.rb:

... # rest of initializerMail.register_observer(StatusSentMailObserver)

如果您正在使用DelayedJob(或几乎任何其他排队系统),您可以实现一个回调方法,以便在作业完成时调用(即发送状态电子邮件),以更新用户的列.

如果要跟踪每天的状态消息,则应考虑创建属于用户的状态模型.每次用户发送电子邮件时都可以创建状态模型,只需检查状态记录是否存在,即可检查电子邮件是否已发送.这个策略是我认真考虑采用的一个简单的status_sent列.

tl; dr ActionController :: Base :: ReportsController.new.send_status&实现一个观察者,用于更新跟踪状态的用户列.但你真的不想这样做.看看我上面提到过的重构.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 如何从ActiveAdmin调用控制器 *** 作?全部内容,希望文章能够帮你解决ruby-on-rails – 如何从ActiveAdmin调用控制器 *** 作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存