Добавление двух столбцов таблицы для сортировки - PullRequest
0 голосов
/ 03 августа 2011

Я создаю приложение для управления задачами, используя Ruby on Rails (3.0).У меня есть проекты и задачи.Задачи принадлежат проектам и проектам имеет много задач.

В моей таблице задач есть столбцы для позиции, project_position и приоритета.Столбец позиции обновляется, когда сортируемый список перемещается через AJAX.Столбец project_position обновляется, когда проекты сортируются через сортируемый список и AJAX.Я хочу, чтобы столбец приоритета был СУММОЙ позиции и project_position, чтобы я мог: order => "priority".

Есть идеи?

ОБНОВЛЕНИЕ:

Не уверенесли мешает следующий код:

projects_controller.rb

  def sort
    params[:projects].each_with_index do |id, index|
      Project.update_all(['position=?', index+1], ['id=?', id])
    end
    render :nothing => true
  end

tasks_controller.rb

  def sort
    params[:tasks].each_with_index do |id, index|
      Task.update_all(['position=?', index+1], ['id=?', id])
    end
    render :nothing => true
  end

1 Ответ

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

Я бы сделал это с помощью before_save обратного вызова.

class Task < ActiveRecord::Base
  before_save :set_priority

  protected

  def set_priority
    self.priority = self.project_position + self.position
  end
end

Если вы следуете моему другому предложению на delegate позицию от задачи к проекту, то вам может потребоваться / понадобиться дополнительная проверка, чтобы убедиться, что задача была построена или создана с проектом, потому что не делегированное project_position вернет nil, и при попытке добавить его вы получите ошибку.

Вы также захотите продолжить этот обратный вызов after_save в Project, чтобы все задачи были повторно сохранены и, таким образом, обновлены их значения приоритетов в БД.

class Project < ActiveRecord::Base
  after_save :set_task_priorities

  protected

  def set_task_priorities
    self.tasks.each(&:save)
  end
end
...