Rails:模型的自定义排序和优先级

时间:2017-07-19 16:12:27

标签: ruby-on-rails activerecord rails-activerecord

对于我正在开发的Rails项目,我有一个模型,它附有图像和优先级。所以它看起来像这样:

card: 
  -id 
  -name
  -img_url
  -priority

priority是一个数字,其中1是最高优先级(默认值),它继续为2,3等。

我的问题是,在创作时分配这些优先级的最佳方法是什么?我应该在控制器中保留一个变量来跟踪已分配的优先级并分配下一个吗?此外,这些优先级就像是改变,即优先级为3的卡更改为1,因此1必须变为2,而2必须变为3.

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

你可以找到最后一个号码,然后添加它并检查

def create
  @card = Card.new(params...)
  @last_card = Card.last
  priority = @last_card.priority
  if priority == 3 
    next_priority = 1
  else
    next_priority = priority + 1
  end
  @card.priority = next_priority
end 

答案 1 :(得分:0)

我建议对DB和DB触发器进行优先级管理操作是一个很好的解决方案。

首先设置priority列的唯一约束,以确保另一个线程无法插入相同的下一个优先级编号。您可以使用max函数获取下一个数字。

当优先级发生变化时,您将逐个更改所有行的优先级,如果在轨道中完成,这将是资源密集型操作。