Отправка Pdf по электронной почте в Rails

emp_ids = params[:employee_ids]

Я работаю над проектом на рельсах, где у меня есть страница со списком сотрудников. Этот список представляет собой список зарплатных ведомостей сотрудника. В этом списке я применил флажки, а внизу есть кнопка «Отправить». Я хочу, чтобы если я выберу несколько флажков, электронная почта должна быть отправлена ​​​​всем сотрудникам, включая pdf-файл зарплатной ведомости. Я могу сделать это, если я выберу флажок, при нажатии на «Отправить» все зарплатные ведомости приходят для сотрудника, которого я выбрал, но на этой pdf-странице я не могу применить функциональность электронной почты, поэтому я хочу, чтобы это произошло напрямую. Я использовал злой pdf и actionmailer, но я не понимаю, как я могу отправить массив идентификаторов нескольких сотрудников (например, я написал на своей индексной странице [employee_ids] и получил к нему доступ с помощью params[:employee_ids] в контроллере) в Action Mailer для отправки электронной почты.


person Mahesh Sharma    schedule 21.02.2017    source источник
comment
когда вы проверяете, чем каждый проверенный сотрудник получает зарплату, его / ее зарплатная квитанция по почте, верно?   -  person Divyang Hirpara    schedule 21.02.2017
comment
да ... я хочу, чтобы это было в электронной почте каждого сотрудника, которого я выбрал с помощью флажка. Я также написал в ActionMailer, но я не знаю, могу ли я отображать так много PDF-файлов по электронной почте.   -  person Mahesh Sharma    schedule 21.02.2017
comment
кто-нибудь знает, как я могу достичь этой функциональности??? мне нужно срочно....   -  person Mahesh Sharma    schedule 22.02.2017
comment
почему бы вам не пройтись по массиву employee_id и не отправить письмо каждому? Поскольку содержимое электронной почты различается, вы не можете просто сказать ActionMailer, чтобы отправить одно электронное письмо разным сотрудникам с разным содержимым. Если бы контент был одинаковым, вы, конечно, могли бы отправить одно электронное письмо всем разным сотрудникам одновременно. так почему бы вам просто не использовать что-то похожее: params[:employee_ids].each {|employee_id| YourSalaryMailer.send_salary_pdf(employee_id).deliver_now }   -  person bpieck    schedule 24.02.2017
comment
ок попробую.....спасибо за ответ.....!!!!!!   -  person Mahesh Sharma    schedule 27.02.2017
comment
но как я могу применить циклы для отправки электронной почты???? приведи пример....!!!!!   -  person Mahesh Sharma    schedule 27.02.2017
comment
хочу только базовый синтаксис того, как я могу его повторить.   -  person Mahesh Sharma    schedule 27.02.2017
comment
если кто знает ответ то пожалуйста ответьте.........!!!!!!!!!!!!   -  person Mahesh Sharma    schedule 23.03.2017


Ответы (1)


Попробуй это,

def generate_slip
  employees = Employee.where(id: emp_ids)
  employees.each do |employee|
   @employee = employee
   pdf_name = employee.name + Date.today.to_s
   pdf = render_to_string pdf: "pdf.html.erb", template: "employees/pdf.html.erb", layout: 'layouts/pdf', encoding: "UTF-8"
   file_path = Rails.root.join('pdfs',"#{pdf_name}.pdf")
   File.open(save_path, 'wb') do |file|
     file << pdf
   end
   UserMailer.send_file(to: employee.email, subject: "Slip")
  end 
end

Вам нужно создать одну папку с именем «pdfs» в общем каталоге и один файл с именем «pdf.html.erb» в каталоге сотрудников.

Все переменные экземпляра доступны в файле pdf.html.erb.

Надеюсь, это поможет вам

person Hardik Upadhyay    schedule 23.03.2017
comment
для хранения сгенерированного файла PDF вы можете хранить где угодно - person Hardik Upadhyay; 23.03.2017
comment
это мой массив... я хочу подсчитать повторяющиеся элементы в массиве и отобразить, сколько раз этот элемент повторяется... означает, что 5151 повторяется 2 раза, поэтому он должен отображать 5151 = 2 - person Mahesh Sharma; 23.03.2017
comment
результат = array.each_with_object(Hash.new(0)) { |key,counts| counts[ключ] += 1 } - person Hardik Upadhyay; 23.03.2017
comment
это в хэше.... как я могу преобразовать его в простой объект, чтобы я мог получить.... 5151=6,4922=2 и так далее............. - person Mahesh Sharma; 23.03.2017
comment
потому что 5151 - это идентификатор сотрудника ... поэтому я хочу отображать его так ... например, 5151 имя - abc ... поэтому оно должно быть таким ......... abc = 2 и т. д. .......... - person Mahesh Sharma; 23.03.2017
comment
вы не можете напрямую перейти к простой форме, вам нужно повторить ее. - person Hardik Upadhyay; 23.03.2017
comment
@employee_leav_requests = EmployeeLeavRequest.where.not(first_reporter_id: nil).where(current_status: Pending).pluck(:first_reporter_id) - person Mahesh Sharma; 23.03.2017
comment
если у первого репортера есть 6 сотрудников, а EmployeeLeavRequest - это имя таблицы..... тогда first_reporter_id может быть общим для многих сотрудников... поэтому я хочу имя сотрудников, чьи - person Mahesh Sharma; 23.03.2017
comment
менеджер по отчетности такой же. Например, для [5151,{4605,4606,4607,4608}] здесь 5151 - это first_reporter, и под ним 6 сотрудников. - person Mahesh Sharma; 23.03.2017
comment
я разместил один вопрос... ответьте на него.... stackoverflow.com/questions/43270910/ @хардик - person Mahesh Sharma; 07.04.2017