Rails多条记录选择并应用多个操作

时间:2015-02-24 13:31:18

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 erb

我在rails上很新,我在设计管理仪表板时遇到了一些麻烦。

我想要实现的目标是:

从数据库中获取多个用户的列表。

能够选择多条记录。

能够对所有人采取不同的行动 选定的记录。

这些操作可能无法直接转换为SQL查询。 (例如发送电子邮件)

我不是在寻找一个完整的解决方案来解决这个问题。我有一种感觉,我开始走错路。

到目前为止,我正在这样做:

查看

<%= form_tag("some_path", method: "get") do %>
    <% @users.each do |user| %>
        <%= check_box_tag "user_ids[]", users.id %>
    <%end%>
<%= submit_tag("Send Email") %>
<%end%>

控制器

def send_email
    @recipients = User.find(params[:user_ids])
    @recipients.each do |recipient|
        Notifier.raw_email(recipient.email, params[:user_email][:subject], params[:user_email][:body]).deliver
    end
end

这样可行,但我只能应用一个动作,发送电子邮件。 我希望能够选择要应用于所有选定记录的操作,或将多个操作应用于所选记录

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用所需的不同操作选择标记。

然后在更改select标签时,您可以更新表单的action属性。例如,使用jQuery。

$('#my-action-select').change(function() {
  $('#myform').attr('action', $(this).val)
})

答案 1 :(得分:1)

您可以使用send方法调用模型的方法。

class User
  def send_email(subject, body)
    Notifier.raw_email(self.email, subject, body).deliver
  end      
end

/some_path也接受actions

的数组

在我们的案例中actions = ['send_email']

some_path解决的操作中,

class SomeController < ActionController::Base
  def some_action # that some_path resolves to in your config/routes.rb
    @recipients = User.find(params[:user_ids])
    @actions = params[:actions]
    @recipients.each do |recipient|
      @actions.each do |action|
        recipient.send(action, params[:subject], params[:body])
      end
    end
  end
end

通过这种方式,您可以调用多个方法。确保您只接受有效的action值,否则管理员只需调用任何用户的方法。