Как вы пишете форму Rails, которая сохраняет только измененные элементы? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть форма, в которой пользователь может редактировать множество объектов одновременно. Форма использует form_tag и множество экземпляров (через итерацию) text_field_tag, select_tag и check_box_tag.

В том виде, в котором он создан в настоящее время, отправка формы заставляет действие контроллера вызывать .save! для каждого отдельного объекта, который мог быть обновлен, независимо от того, внес ли пользователь какие-либо изменения в него. Это явно не идеально.

Как изменить форму и действие контроллера, чтобы они сохраняли только те объекты, которые необходимо сохранить?

1 Ответ

1 голос
/ 07 декабря 2011

Я бы сделал это, установив фильтры before_save для каждой из соответствующих моделей.Загрузите сохраненное состояние этого текущего объекта и сравните относительные атрибуты.Если ни один из атрибутов не изменился, верните false:

class Post < ActiveRecord::Base
  before_save :check_for_changes

private
  def check_for_changes
    saved = Post.find(self.id)
    should_save = false
    if saved.body != self.body || saved.title != self.title
      should_save = true
    end
    should_save
  end
end

Тем не менее, я думаю, что гем редактирования на месте - хорошая идея.Там может быть другой драгоценный камень, который делает это также.Я просто лично не знаю об этом.

...