我正在使用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
答案 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