Rails 5.跟踪模型之间关联的顺序

时间:2017-08-25 14:22:15

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

我可以想办法自己实现这个,但我希望有人可以链接到gem或者也许只是ruby中适用的排序算法。

问题

跟踪两个模型之间的关联顺序。允许用户使用下面的示例模型创建children belong_to parent并按最喜欢的顺序排列他们。

要明确我意味着命令ActiveRecord::Relation或将order by子句添加到sql语句。

我希望用户能够CRUD children,并以相同的形式CRUD他们的订单(因为他们的订单可能会存储在同一个模型中)

我正在考虑使用favourite_order列(请参阅下面的架构)来跟踪订单,但是,如果将4号孩子提升为1号(吃了一只熊,将其放平),其余的则会相应降低,即第1段另一个例子是,第二个孩子被删除(在森林火灾中死亡),所有较低等级的孩子将自动晋升,即他们的等级将增加一个。

知道提供此功能的任何宝石或我自己可以用来实现它的任何排序算法吗?

示例

应用程序/模型/ parent.rb

class Parent < ApplicationRecord
  has_many :children
end

应用程序/模型/ child.rb

class Child < ApplicationRecord
  belongs_to :parent
end

分贝/ schema.rb

ActiveRecord::Schema.define(version: 20170812100949) do

  create_table "children", force: :cascade do |t|
    t.integer "parent_id"
    t.text "child_name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end  

  create_table "parents", force: :cascade do |t|
    t.text "parent_name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end

1 个答案:

答案 0 :(得分:1)

对于你提到的冒泡,有ranked-modelacts_as_list之类的宝石可以为你处理。通常他们有一个底层"."字段,你不直接写,所以gems为你处理更新。您只需添加到结尾,开头或“列表”中的特定位置。