我正嘗試在RoR中創建一個系統發送電子郵件,我希望用戶能夠做的是通過表單上的複選框選擇多個電子郵件地址,並通過每個選中的複選框發送電子郵件每一個。當時用戶可以在表格上選擇多個電子郵件地址,並且系統將它們結合在一起,以便將一封電子郵件發送給多個收件人,例如,用戶選擇電子郵件地址「1 @ a.com」和「2 @ b.com」,並且系統發送電子郵件到「1 @ a.com; 2 @ b.com」。Ruby on Rails:通過電子郵件地址的複選框循環併發送電子郵件給每個?
我已經通過視圖做到了這一點:
<%= form_for(@email) do |f| %>
<% if @email.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@email.errors.count, "error") %> prohibited this email from being saved:</h2>
<ul>
<% @email.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :from_name %><br>
<% if @user.present? %>
<%= f.select :from_name, [@user.firstname + " " + @user.surname, @user.organisation] %>
<% end %>
</p>
<p>
<%= f.label :From_Email_Address %><br>
<%= f.collection_select :account_id, Account.where(user_id: session[:user_id]),
:id,:email %>
</p>
<p>
<%= f.label :to %><br>
<%= f.collection_check_boxes(:to, @contacts, :email, :email) %>
</p>
<p>
<%= f.label :cc %><br>
<%= f.text_field :cc %>
</p>
<p>
<%= f.label :bcc %><br>
<%= f.text_field :bcc %>
</p>
<p>
<%= f.label :subject %><br>
<%= f.text_field :subject %>
</p>
<p>
<%= f.label :message %><br>
<%= f.text_field :message %>
</p>
<div class="actions">
<%= f.submit %>
</div>
隨着顯示每個保存在聯繫人數據庫表中的電子郵件地址的複選框行<%= f.collection_check_boxes(:to, @contacts, :email, :email) %>
。
這然後通過對emails_controller
,其具有下面的代碼變爲:
class EmailsController < ApplicationController
before_action :set_email, only: [:show, :edit, :update, :destroy]
def index
# Only show the email accounts for the user logged in
@emails = Email.where(user_id: session[:user_id])
end
def show
end
def new
@user = User.find(session[:user_id])
@contacts = Contact.where(user_id: session[:user_id])
@email = Email.new
end
def edit
@user = User.find(session[:user_id])
@contacts = Contact.where(user_id: session[:user_id])
end
def create
@email = Email.new(email_params)
@email.user_id = session[:user_id]
@user = session[:user_id]
if @email.save
UserEmails.send_email(@email).deliver_now
redirect_to @email, notice: 'Email was successfully created.'
else
redirect 'new'
end
end
def update
if @email.update(email_params)
redirect_to @email, notice: 'Email was successfully updated.'
else
redirect 'edit'
end
end
def destroy
@email.destroy
redirect_to emails_url, notice: 'Email was successfully destroyed.'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_email
@email = Email.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def email_params
res = params.require(:email).permit(:account_id, :cc, :bcc, :subject, :message, :from_name, to: [])
res[:to] = res[:to].join('; ')
res
end
end
隨着email_params
代碼接合的電子郵件地址與所選擇在一起的「;」每一個之間。
正如您在create
方法中看到的那樣,保存電子郵件後會運行代碼UserEmails.send_email(@email).deliver_now
- 此代碼將發送電子郵件。
所以,我的問題是,是否有人可以幫助我更改代碼,以便將一封電子郵件發送到表單上選定的每個電子郵件地址?
下面是我的形式與複選框的樣子。
嗨普拉迪普,當你說「使用多個選擇框」一個JavaScript和CSS,你的意思是添加一個複選框每個電子郵件地址而不是使用'collection_check_boxes'? –
好的,感謝您的編輯,但我看不到選擇中顯示的聯繫人的電子郵件地址?即我能看到的唯一的價值是「輸入電子郵件地址」,由於某些原因電子郵件不通過。任何想法爲什麼? –
有沒有辦法使用複選框來做到這一點? –