如何在 rails 中使用 actionmailer 发送自己生成的 csv 附件
how to send self generated csv attachmnet using action mailer in rails
在我的 Rails 应用程序中,我在预订模型中创建了一个 CSV 文件。
def self.to_excel
attributes = %w{ name email mobile address transaction_id price deposit paid booked_by date}
CSV.generate(headers: true) do |csv|
csv << attributes
where('date(created_at) = ?', Date.today).each do |booking|
csv << attributes.map{ |attr| booking.send(attr) }
end
end
end
预订控制器
def index
respond_to do |format|
format.html
format.csv { send_data @bookings.to_excel, filename: "Booking-#{Date.today}.csv" }
end
end
邮寄者
class CsvMailer < ApplicationMailer
default from: "xyz@gmail.com"
def send_csv(booking)
@booking = booking
attachments['Booking.csv'] = {mime_type: 'text/csv', content: csv}
mail(to: "xyz@gmail.com", subject: "Booking Details-#{Date.today}.csv")
end
end
我需要每 24 小时发送一次自动生成的 csv 文件,其中包含当天预订的详细信息。这应该只生成 csv 并通过邮件程序将其邮寄。我该如何进行。哪位大神能帮帮忙
如果您想每 24 小时发送一次电子邮件,您需要执行 cron 作业。
请检查 gem whenever ,它用于 rails
中的 cron 作业
在schedule.rb
every :day, at: '12:00am' do
runner "Booking.send_csv"
end
在 send_csv 方法中,生成 CSV 文件然后将其发送到邮件,如下所示
class Booking
def generate_csv
bookings = create query for fetching today's bookings
csv = bookings.to_excel
CsvMailer.send_csv(user, csv).deliver
end
end
您可以使用 Arask 进行最少的设置。安装 gem 并初始化文件并将其放入 config/initializers/arask.rb
arask.create script: 'Booking.send_csv', cron: '0 0 * * *'
并重用@vishal 代码:
class Booking
def generate_csv
bookings = create query for fetching todays bookings
csv = bookings.to_excel
CsvMailer.send_csv(user, csv).deliver
end
end
在我的 Rails 应用程序中,我在预订模型中创建了一个 CSV 文件。
def self.to_excel
attributes = %w{ name email mobile address transaction_id price deposit paid booked_by date}
CSV.generate(headers: true) do |csv|
csv << attributes
where('date(created_at) = ?', Date.today).each do |booking|
csv << attributes.map{ |attr| booking.send(attr) }
end
end
end
预订控制器
def index
respond_to do |format|
format.html
format.csv { send_data @bookings.to_excel, filename: "Booking-#{Date.today}.csv" }
end
end
邮寄者
class CsvMailer < ApplicationMailer
default from: "xyz@gmail.com"
def send_csv(booking)
@booking = booking
attachments['Booking.csv'] = {mime_type: 'text/csv', content: csv}
mail(to: "xyz@gmail.com", subject: "Booking Details-#{Date.today}.csv")
end
end
我需要每 24 小时发送一次自动生成的 csv 文件,其中包含当天预订的详细信息。这应该只生成 csv 并通过邮件程序将其邮寄。我该如何进行。哪位大神能帮帮忙
如果您想每 24 小时发送一次电子邮件,您需要执行 cron 作业。
请检查 gem whenever ,它用于 rails
中的 cron 作业在schedule.rb
every :day, at: '12:00am' do
runner "Booking.send_csv"
end
在 send_csv 方法中,生成 CSV 文件然后将其发送到邮件,如下所示
class Booking
def generate_csv
bookings = create query for fetching today's bookings
csv = bookings.to_excel
CsvMailer.send_csv(user, csv).deliver
end
end
您可以使用 Arask 进行最少的设置。安装 gem 并初始化文件并将其放入 config/initializers/arask.rb
arask.create script: 'Booking.send_csv', cron: '0 0 * * *'
并重用@vishal 代码:
class Booking
def generate_csv
bookings = create query for fetching todays bookings
csv = bookings.to_excel
CsvMailer.send_csv(user, csv).deliver
end
end