Rails 3 формы, нужен лучший дизайн, возможно с AJAX - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь создать страницу, которая обновляет роли моих пользователей. У меня есть пользовательский контроллер и метод / действие в контроллере под названием «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, где кнопка обновления не нужна?

Спасибо за любой совет или помощь.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Первое, что вы можете сделать, это изменить ваши формы на удаленные, которые используют ajax для обновления.Вы можете сделать это в рельсах с одним изменением

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

Эффект здесь будет в том, что кнопка отправки для каждого пользователя отправляет изменение формы, не снимая вас со страницы.

Вот документация .

Далее, если вы хотите полностью удалить кнопки отправки и отправить их при изменении, вы можете использовать очень простой jQuery, который прослушивает изменения при вводеполя и отправляет родительскую форму, когда происходит изменение. Вот статья, с которой вы можете начать

Возможно, сделать одну кнопку отправки для всех объектов труднее.Из того, что я знаю, вам нужно будет распечатать поля для всех объектов в одной форме, возможно, отправить форму другому действию, а затем просмотреть всех пользователей, у которых есть изменения в форме, и вызвать действие обновления для них.по отдельности.Там может быть более простой способ, хотя.

1 голос
/ 26 апреля 2011

Итак, если вы хотите пойти по пути AJAX, я бы порекомендовал добавить библиотеку JavaScript, такую ​​как jQuery (вероятно, не ExtJS, если вы используете хороший бит HTML).

JQuery имеет встроенную функциональность AJAX.

...