2011-04-25 80 views
0

我試圖做一個頁面,更新我的用戶的角色。我有一個用戶控制器和一個名爲「admin」的控制器中的方法/動作。所有管理員定義所做的就是將所有用戶存儲在@users中。在路由中,資源是用戶,並且它有一個集合,可以獲得:admin。Rails 3表單,需要更好的設計,可能與ajax

我通過爲每個用戶創建一個新的形式更新的角色和我有一個爲每個表單保存旁邊的每個用戶按鈕。

<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在更新按鈕是沒有必要?

感謝您的任何建議或幫助。

回答

1

所以,如果你想去的AJAX路線,我建議你帶來一個JavaScript庫,如jQuery(可能不是ExtJS的,如果你使用HTML好一點)。

JQuery內置了AJAX功能。

2

您可以做的第一件事是將您的表單更改爲使用ajax進行更新的遠程表單。您可以在導軌和一個變化

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

影響這裏做這將是提交按鈕爲每個用戶提交表單的變化,而不帶你離開頁面。

Here is the documentation

接下來,如果你想徹底刪除的提交按鈕,並把它提交的變化,你可以使用一些非常簡單的jQuery監聽輸入字段變更,並在變更發生時提交父窗體。 Here is an article to get you started on that

製作一個所有對象提交按鈕可能更困難。根據我所知,您必須將所有對象的字段打印到一個表單中,可能會將表單發送給不同的操作,然後循環顯示錶單中發生更改的所有用戶並對其調用更新操作分別。不過,可能有更簡單的方法。

+0

當我這樣做時,我似乎無法獲得路線工作。我從我的終端ActionController :: RoutingError(沒有路由匹配「/用戶/ 3」)得到一個錯誤。我在我的控制器中有一個更新命令,它以另一種方式工作。 – a3uge 2011-04-26 00:04:28

+0

看看是否有幫助:http://stackoverflow.com/questions/4025044/rails-3-routing-error – 2011-04-26 00:52:18

+0

不是。我通過:url => users_path和:controller =>「users」以及:action =>「update」到form_for ...我的終端返回開始POST「/ users」爲... 處理方式: RegistrationsController#創建爲JS 我不知道爲什麼它會去註冊控制器 – a3uge 2011-04-26 02:16:11