0

我正在尝试创建一个选择的用户列表,然后在提交表单上将发送一封电子邮件。这样就欢迎这些人访问网站。问题是我似乎无法遍历我的复选框列表以便能够向每封电子邮件发送一封电子邮件。这是我的表格

<%= form_tag(invites_path) do %>
  <% @contacts.each do |c|%>
    <div>
    <%= label_tag 'accept', c[:email] %>
    <%= check_box_tag 'accept[]', c[:email], checked = true %>
  <% end %>
  <%= submit_tag "Send Invitations" %>
<% end %>

现在,invites_path 就是控制器所在的位置,c[:email] 是每个所需用户的电子邮件。现在这里是我的控制器以及我遇到问题的地方。

# if there is more than one checkbox selected
if not params[':accept'].nil?
  params[':accept'].split.each do |u|
  InvitesMailer.invite_confirm(current_customer, u).deliver
end
else # only one checkbox selected
  InvitesMailer.invite_confirm(current_customer,params[':accept']).deliver
end

为什么我看不懂

如果我只选择一个或多个复选框,我会收到 wrong number of arguments (2 for 1)此行的以下错误

InvitesMailer.invite_confirm(current_customer,params[':accept']).deliver

参数如下

{"utf8"=>"✓", "authenticity_token"=>"dNQPNGrOsw6bxRwAYxjNrC8qoqR+A228YsmTfYUCc3Y=", "accept"=>["example@gmail.com", "example2@gmail.com"],"commit"=>"Send Invitations"}

我还想指出,我尝试按照本教程在 Rails 上发送电子邮件 ruby​​ 复选框,但我对复选框有点困惑

更新:对于我的邮件控制器

def invite_confirm(curuser,usemail)
    @greeting = "Hi"
    @user = curuser

    mail to: usemail, subject: "WhereyouWhere Invitation"
end
4

1 回答 1

1

您能否通读以下内容,如果它解决了您的问题,请告诉我。

首先是参数的名称

我很确定有一种骇人听闻的方式来命名参数,':accept'因此它可能是有效的参数名称,但在这种情况下,这不是您想要的。params[':accept']更改withparams[:accept]或的所有实例params['accept']

其次是 if 块

将您的if块更改为以下代码。因为params[:accept]将永远是一个数组。您不需要对其调用 split 并且不需要 else 块。

if params[:accept].present?
  params[:accept].each do |email|
    InvitesMailer.invite_confirm(current_customer, email).deliver
  end
end
于 2013-04-09T00:46:29.063 回答