Использование after_save для обновления всех записей принадлежащих - PullRequest
0 голосов
/ 03 августа 2011

Я создаю приложение для управления проектами в 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 Ответ

1 голос
/ 03 августа 2011

Не храните значение несколько раз - это 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 будет подходящим местом для этого.

...