Как редактировать несколько записей в одной форме Ruby on Rails? - PullRequest
9 голосов
/ 08 июня 2009

Я делаю простое приложение со списком дел, чтобы научить себя Ruby on Rails, однако столкнулся с проблемой. У меня есть простая форма, в которой перечислены задачи с флажком слева от них и кнопкой «Обновить» внизу, например:

[] сделать посуду
[] Убери мусор
[] Захватить мир
(Обновление)

Каждый элемент списка дел представляет собой отдельную запись в базе данных с «завершенным» логическим полем. Я хочу, чтобы форма отправляла список идентификаторов отмеченных элементов в действие, в котором я могу установить для поля «завершено» каждого элемента значение true, что будет скрывать их от просмотра.

Я знаю, как создать форму, которая ссылается на несколько моделей, но не форму, которая ссылается на несколько записей одной и той же модели. Любые советы?

Спасибо!

Ответы [ 4 ]

26 голосов
/ 08 июня 2009

Railscasts - твой друг!

http://railscasts.com/episodes/52-update-through-checkboxes

Это действительно просто:

# routes.rb
map.resources :tasks, :collection => { :complete => :put }

# tasks_controller.rb
def complete
  Task.update_all(["completed_at=?", Time.now], :id => params[:task_ids])
end

# views\tasks\complete.html.erb
<% form_tag complete_tasks_path, :method => :put do %>
  <ul>
  <% for task in @incomplete_tasks %>
    <li>
      <%= check_box_tag "task_ids[]", task.id %>
      <%= task.name %>
    </li>
  <% end %>
  </ul>
  <%= submit_tag "Mark as Complete" %>
<% end %>
2 голосов
/ 08 июня 2009

Ничего себе. Это какое-то время. Прямо перед этим вопросом в моем RSS-ридере написано последнее railscast от Райана Бейтса, и, похоже, оно точно соответствует тому, что вы спрашиваете.

1 голос
/ 08 июня 2009

Почему бы не использовать удаленную функцию для обновления базы данных при проверке элемента и вообще избавиться от кнопки обновления?

0 голосов
/ 08 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...