0

我正在尝试制作一个更新用户角色的页面。我有一个用户控制器和一个名为“admin”的控制器中的方法/操作。管理员定义所做的只是将所有用户存储在@users 中。在路由中,资源是用户,它有一个获取 :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?

感谢您的任何建议或帮助。

4

2 回答 2

2

您可以做的第一件事是将表单更改为使用 ajax 进行更新的远程表单。您可以通过一次更改在 Rails 中执行此操作

<%= form_for [user], :user => { :action => "update" }, :remote=>true do |f| %>

此处的效果将是每个用户的提交按钮提交表单更改,而无需离开页面。

这是文档

接下来,如果您想完全删除提交按钮并让它在更改时提交,您可以使用一些非常简单的 jQuery 来监听输入字段的更改并在发生更改时提交父表单。这是一篇让你开始的文章

为所有对象制作一个提交按钮可能更困难。据我所知,您必须将所有对象的字段打印到一个表单中,可能会将表单发送到不同的操作,然后循环遍历表单中发生更改的所有用户并对他们调用更新操作分别地。不过,可能有更简单的方法。

于 2011-04-25T22:18:43.633 回答
1

所以,如果你想走 AJAX 路线,我建议你引入一个像 jQuery 这样的 JavaScript 库(如果你使用了大量的 HTML,可能不是 ExtJS)。

JQuery 内置了 AJAX 功能。

于 2011-04-25T21:42:24.730 回答