我正在尝试创建一个更新用户角色的页面。我有一个用户控制器和一个方法/动作在控制器称为"admin"。admin定义所做的只是将所有用户存储在@users中。在routes中,资源是users,它有一个集合do, get:admin.
我通过为每个用户创建一个新表单来更新角色,并且每个用户旁边的每个表单都有一个保存按钮。
<table>
<tr>
<th>Username</th>
<th>Role</th>
<th>Update</th>
</tr>
<% @users.each do |user| %>
<%= form_for [user], :user => { :action => "update" } do |f| %>
<tr>
<td><%= user.username %></td>
<td><%= select("user", "role", options_for_select(['member', 'moderator','admin'], user.role) )%></td>
<td><%= f.submit %> </td>
</tr>
<% end %>
<% end %>
</table>
这工作和更新,但它不是很直观。我想要么有提交按钮后的整个事情,或ajax调用更新的角色变化,这样用户就不必担心点击"保存"在所有。
是否有一种方法来避免双嵌套循环,并可能添加一个ajax更新按钮是不必要的?
谢谢你的建议和帮助。
您可以做的第一件事是将表单更改为使用ajax进行更新的远程表单。你可以在rails中做一个修改
<%= form_for [user], :user => { :action => "update" }, :remote=>true do |f| %>
这里的效果将是每个用户的提交按钮提交表单更改而不带您离开页面。
这是文档。
接下来,如果您想完全删除提交按钮,并让它在更改时提交,您可以使用一些非常简单的jQuery来侦听输入字段的更改,并在发生更改时提交父表单。这里有一篇文章可以让你开始
为所有对象创建一个提交按钮可能更困难。据我所知,您必须将所有对象的字段打印到单个表单中,可能将表单发送给不同的操作,然后循环遍历表单中有更改的所有用户,并分别对它们调用更新操作。不过,或许有一种更简单的方法。
所以,如果你想走AJAX路线,我建议你引入一个JavaScript库,如jQuery(可能不是ExtJS,如果你正在使用一些好的HTML)。
JQuery内置AJAX功能