添加两个表列进行排序

时间:2011-08-02 21:01:39

标签: ruby-on-rails ruby sorting associations

我正在使用Ruby on Rails(3.0)构建任务管理应用程序。我有项目和任务。任务属于项目和项目有很多任务。

我的任务表包含position,project_position和priority的列。当通过AJAX移动可排序列表时,位置列会更新。当项目通过可排序列表和AJAX进行排序时,project_position列会更新。我希望优先级列为position和project_position的SUM,以便我可以:order => “优先”。

有什么想法吗?

更新:

不确定以下代码是否妨碍:

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 :(得分:0)

我会通过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,当你尝试添加它时会出错。

您还希望继续使用Project上的after_save回调,以便重新保存所有任务,从而更新数据库上的优先级值。

class Project < ActiveRecord::Base
  after_save :set_task_priorities

  protected

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