ruby-on-rails - 如果报告为空白或数据为零,我需要引发异常
问题描述
我试图提出,但由于我是 ruby on rails 的新手,所以如果报告为空,我对如何破例感到迷茫。下面是服务的代码:
class ReportService
def self.generate_report(params, type, data_type = 'data')
"#{type}Report".constantize.send("report_#{data_type}", params)
end
def Not_Blank
raise Exception.new('Deu ruim!') unless @data_type.blank?
end
end
控制器看起来像这样:
class Backend::ReportUsersController < Backend::Controller
respond_to :html, :xlsx, :pdf
load_and_authorize_resource :user, :parent => false
before_action :check_permissions
def report
if params[:user_report][:institutes].reject!(&:blank?).blank?
return redirect_to(
report_users_path,
alert: I18n.t('report.user.error.institute_required')
)
end
if params[:user_report][:start_at].blank?
params[:user_report][:start_at] = I18n.l(User.first.created_at.to_date, format: :default)
end
if params[:user_report][:end_at].blank?
params[:user_report][:end_at] = I18n.l(Date.current, format: :default)
end
params[:user_report][:current_user] = current_user.name
if params [:user_report][:total_participants].blank?
return redirect_to(
report_users_path,
alert: I18n.t('report.user.error.cannot_generate_blank_or_empty_report')
)
end
@report = ReportService.generate_report(params[:user_report], 'User')
@pagy, @report_data = pagy_array(JSON[@report[:data]], size: [2,2,2,2])
end
def generate_file
if params[:format] == 'pdf'
institutes = Institute.where(id: params[:report][:institute_ids])
if institutes.size == 1
@logo = institutes[0].logo
end
respond_to do |format|
format.pdf do
render pdf: I18n.t('activerecord.models.user.other'),
margin: { top: 30 },
footer: {
font_size: 10,
left: "#{I18n.t('report.research.general_labels.generated_at')}: " +
"#{I18n.l(DateTime.current, format: :default_without_seconds)} | " +
"#{I18n.t('report.research.general_labels.by')}: " +
"#{@current_user.name}",
right: "[page] #{I18n.t('report.research.general_labels.of')} [topage]"
},
orientation: 'Landscape',
template: "backend/report_users/layout_pdf.html.erb"
end
end
elsif params[:format] == 'xlsx'
report = ReportService.generate_report(params, 'User', 'excel')
respond_to do |format|
format.xlsx { render xlsx: report[:file], filename: I18n.t('report.user.file_name.report_users') }
end
end
end
private
def check_permissions
raise CanCan::AccessDenied unless @current_user.full_manager?
end
end
解决方案
推荐阅读
- python - 如何使用 GitPython 跳过 Windows 凭据管理器
- javascript - 为什么 start 和 end 的值总是 NaN?
- google-apps-script - 如何使用“OnEdit”功能设置谷歌表格宏以仅在一张表格上运行?
- amazon-web-services - 在 AWS Cloudwatch Logs Insights 上按时间戳查询过滤
- matlab - filtfilt(Matlab 的零偏移滤波器)中的传递函数实际上是什么?
- javascript - 从分组列 ag-grid 中选择一个组
- math - 放大鼠标指向的位置
- rest - tfs2018 rest api 4.0-preview 是否支持 wiki put 方法?
- elasticsearch - Elasticsearch非法映射位置数组
- git - 如果分支尚未合并,我可以推送子分支吗?