#ruby-on-rails #email #mail-form
Вопрос:
Я кодирую сайт для клиента, которому нужна форма, которая отправляет информацию непосредственно на ее электронную почту.
Я смог идеально настроить форму и получаю электронные письма в указанном почтовом ящике, однако мне было интересно, можно ли изменить формат атрибутов в полученной почте.
контакт.рб
class Contact lt; MailForm::Base attribute :Guest_One_First_Name attribute :Guest_One_Surname attribute :Guest_Two_First_Name attribute :Guest_Two_Surname attribute :Children attribute :Restrictions attribute :Attending def headers { #this is the subject for the email generated, it can be anything you want subject: "RSVP", to: 'mariagenourcolas@gmail.com', from: %("#{:Guest_One_First_Name}", "#{:Guest_One_Surname}"), reply_to: %("#{:Guest_One_First_Name}") #the from will display the name entered by the user followed by the email } end end
контроллер
class ContactsController lt; ApplicationController def new @contact = Contact.new end def create @contact = Contact.new(params[:contact]) @contact.request = request if @contact.deliver redirect_to root_path, notice: "RSVP'd Sucessfully" else flash.now[:error] = 'RSVP not taken into account' render :new end end end
HTML
lt;div class="contact-form"gt; lt;%= simple_form_for @contact do |f| %gt; lt;% if flash[:error].present? %gt; lt;pgt; Please correctly complete the fields belowlt;/pgt; lt;% end %gt; lt;div class="form-row"gt; lt;div class="col"gt; lt;%= f.input :Guest_One_First_Name, label:"First Name", error: 'Name is mandatory, please specify one', class:"form-control"%gt; lt;brgt; lt;%= f.input :Guest_One_Surname, label:"Surname", error: 'Name is mandatory, please specify one', class:"form-control"%gt; lt;brgt; lt;/divgt; lt;div class="col"gt; lt;%= f.input :Guest_Two_First_Name, label:"First Name", error: 'Name is mandatory, please specify one', class:"form-control"%gt; lt;brgt; lt;%= f.input :Guest_Two_Surname, label:"Surname", error: 'Name is mandatory, please specify one', class:"form-control"%gt; lt;brgt; lt;/divgt; lt;/divgt; lt;div class="form-row"gt; lt;div class="col"gt; lt;%= f.input :Children, label:'Number of Children', class:"form-control"%gt; lt;brgt; lt;/divgt; lt;/divgt; lt;div class="form-row"gt; lt;div class="col"gt; lt;%= f.collection_check_boxes :Attending, [['Brunch'] ,['Ceremony']], :first, :last %gt; lt;/divgt; lt;/divgt; lt;div class="form-text"gt; lt;%= f.label 'Dietary Restrictions' %gt; lt;%= f.text_area(:Restrictions, rows: 3, class:"form-control")%gt; lt;brgt; lt;/divgt; lt;div class="send-button"gt; lt;%= button_tag(type: 'submit', class: "suggest-btn-send") do %gt; lt;pgt;RSVPlt;/pgt; lt;% end %gt; lt;/divgt; lt;% end %gt; lt;/divgt;
и вот что я получаю по электронной почте:
Приглашенный гость одно имя: Мари
Гость одна фамилия: Л…
Гость два имя: Мари
Гость две фамилии: С….
Дети: 4
Ограничения: отсутствуют
Участие: [«», «Поздний завтрак», «Церемония»]
Я хотел бы, чтобы присутствующие не были в виде массива, и хотел бы, чтобы информация была прочитана:
Гость первый: Мари Л…. Гость второй: Мари С… Участие: Поздний завтрак, Церемония.
Пожалуйста, помогите !
Ответ №1:
Просто запустите .join(‘, ‘) в вашем массиве, и он создаст для вас строку.
Учитывая ваш пример, вы можете сначала немного очистить массив, чтобы убедиться, что в нем нет пустых значений, иначе вы можете получить», Поздний завтрак, Церемония».
Используйте что-то похожее на .reject(amp;:пустой?) в вашем массиве, чтобы удалить пустые.