繁体   English   中英

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

[英]Rails multiple records select and apply multiple actions

我是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

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

有什么想法吗?

您可以选择一个标签,其中包含所需的不同操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM