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

Другие вопросы по тегам