Использование after_save для обновления всех записей принадлежащих
Я создаю приложение для управления проектами в Ruby on Rails (3.0). Я пытаюсь выяснить, как обновить все задачи проекта при обновлении столбца проекта. Здесь ситуация.
Я перечисляю все проекты, как и ожидалось, в /projects/index.html.erb. Я использую сортируемый список ( из учебника Райана Бейтса), чтобы обновить поле project.position, когда пользователь сортирует список.
Когда список проектов отсортирован project.position
столбец обновляется при каждой сортировке, я также хочу обновить столбец task.project_position всех задач, которые belong_to
этот проект. Итак, task.project_position = project.position.
Я предполагаю, что это делается с помощью after_save в модели проекта, но я могу ошибаться.
1 ответ
Не храните значение несколько раз - это redundant
а также unnecessary
во всех, кроме нескольких эзотерических случаев.
В Ruby/Rails вы можете delegate
от задачи к проекту для метода позиционирования, как это (в вашей модели задачи):
delegate :position, :to => :project, :prefix => true, :allow_nil => true
С этим на месте, теперь у вас есть task.project_position
который будет возвращать значение project.position через связь между ними, без дублирования этого элемента данных во всех задачах проекта.
Все это предполагает эту задачу belongs_to :project
(и, возможно, проект has_many :tasks
).
Если вы чувствуете, что по какой-то причине вы действительно должны пойти по ненормализованному маршруту, тогда да, after_save будет подходящим местом для этого.