我在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
这样可行,但我只能应用一个动作,发送电子邮件。 我希望能够选择要应用于所有选定记录的操作,或将多个操作应用于所选记录
有什么想法吗?
答案 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
值,否则管理员只需调用任何用户的方法。