0

ユーザーの役割を更新するページを作成しようとしています。ユーザーコントローラーと、コントローラーに「admin」と呼ばれるメソッド/アクションがあります。管理者定義が行うのは、すべてのユーザーを @users に保存することだけです。ルートでは、リソースはユーザーであり、:admin を取得するコレクション do があります。

ユーザーごとに新しいフォームを作成してロールを更新しています。各ユーザーの横に各フォームの保存ボタンがあります。

<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 を使用して更新するリモート フォームに変更することです。1回の変更でレールでこれを行うことができます

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

ここでの効果は、ページから移動することなく、各ユーザーの送信ボタンがフォームの変更を送信することです。

これがドキュメントです。

次に、送信ボタンを完全に削除して変更時に送信する場合は、入力フィールドの変更をリッスンし、変更が発生したときに親フォームを送信する非常に単純な jQuery を使用できます。これはあなたがそれを始めるための記事です

すべてのオブジェクトに対して 1 つの送信ボタンを作成することは、おそらくより困難です。私が知っていることから、すべてのオブジェクトのフィールドを単一のフォームに出力し、おそらくフォームを別のアクションに送信し、フォームに変更があるすべてのユーザーを循環させて更新アクションを呼び出す必要があります別々に。ただし、もっと簡単な方法があるかもしれません。

于 2011-04-25T22:18:43.633 に答える
1

したがって、AJAX ルートに進みたい場合は、jQuery などの JavaScript ライブラリを導入することをお勧めします (かなりの量の HTML を使用している場合は、ExtJS ではない可能性があります)。

JQuery には AJAX 機能が組み込まれています。

于 2011-04-25T21:42:24.730 に答える