Rails 多条记录 select 并应用多个操作

Rails multiple records select and apply multiple actions

我是 rails 的新手,我在设计管理仪表板时遇到了一些问题。

我要实现的是:

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

能够select多条记录。

能够对所有 select 编辑记录。

操作可能无法直接翻译成 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

这按原样工作,但我只能应用一个操作,即发送电子邮件。 我希望能够选择一个操作应用于所有 selected 记录或将多个操作应用于 selected 记录

有什么想法吗?

您可以使用包含您需要的不同操作的 select 标签。

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

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

您可以使用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 值,否则管理员可以简单地调用用户的任何方法。