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

Ruby on rails Rails多条记录选择并应用多个操作,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,erb,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Erb,我是rails的新手,在设计管理仪表板时遇到了一些问题 我想要实现的是: 拥有数据库中多个用户的列表 能够选择多个记录 能够将不同的操作应用于所有 选定的记录 这些操作可能无法直接转换为SQL查询。例如,发送电子邮件 我不是在寻找问题的完整解决方案,只是对如何解决这个问题的一般描述。我觉得我开始走错了路 到目前为止,我正在这样做: 看法 这是因为它是,但我只能申请一个行动,发送电子邮件,这是。 我希望能够选择要应用于所有选定记录的操作,或对选定记录应用多个操作 有什么想法吗?您可以使用一个带有所

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

我想要实现的是:

拥有数据库中多个用户的列表

能够选择多个记录

能够将不同的操作应用于所有 选定的记录

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

我不是在寻找问题的完整解决方案,只是对如何解决这个问题的一般描述。我觉得我开始走错了路

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

看法

这是因为它是,但我只能申请一个行动,发送电子邮件,这是。 我希望能够选择要应用于所有选定记录的操作,或对选定记录应用多个操作


有什么想法吗?

您可以使用一个带有所需不同操作的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\u路径也接受一系列操作

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

在某个路径解析为的动作中

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

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

也许您可以重定向回保留选择的列表,以便对该选择执行新操作,另一个选项是使用包含bash操作的activeadmin gem。您还可以在同一页面上列出操作数,可能是复选框“发送邮件”、“发送邀请”、“请求详细信息”、“发送所选操作数”和“所选用户数”。在controller define另一个方法def handle_actions,actions的用例,然后对于每个action调用方法,例如发送_emailnumber_个用户,请求_details_个用户这似乎是一个惊人的解决方案。你能给我举个例子,说明一些路径应该是什么样子的吗?现在我使用的是:/user\u email/new,它将我发送到email composer页面,将所有ID向前传输,直到到达send\u email action添加get:some\u path,controller::some\u controller,action::some\u action(在您的配置/routes.rb中)。对不起,我问了一些愚蠢的问题。。我感到困惑的是,如何将我的视图文件中的这些动作参数传递给您为所有用户记录添加的复选框,也许您可以为整个页面设置一组“动作”复选框?我觉得这只会让它选择一个动作,而不是发送多个动作,但这是一个很棒的选择,尽管+1
class User
  def send_email(subject, body)
    Notifier.raw_email(self.email, subject, body).deliver
  end      
end
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