【问题标题】:Rails 5. Track the order of Associations between modelsRails 5. 跟踪模型之间的关联顺序
【发布时间】:2017-08-25 14:22:14
【问题描述】:

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

问题

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

明确地说,我不是是指订购ActiveRecord::Relation 或在 sql 语句中添加 order by 子句。

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

我正在考虑使用favourite_order 列(参见下面的架构)来跟踪订单,但是,如果孩子 4 被提升为第一名(吃了一只熊,升级了),其余的会相应地冒泡,即第一名将成为第二名等等。另一个例子,第二个孩子被删除(死于森林大火),所有低等级的孩子都会自动提升,即他们的等级会增加一个。

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

示例

app/models/parent.rb

class Parent < ApplicationRecord
  has_many :children
end

app/models/child.rb

class Child < ApplicationRecord
  belongs_to :parent
end

db/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

【问题讨论】:

  • 父母和/或孩子是否属于特定用户?我想知道Parent A 及其Children 是否应该为每个User 以不同的方式订购,或者Parent A 及其Children 是否只有一个有效订单
  • 不,先生,唯一涉及的模型是 child 和 parent。所谓用户,我指的不是使用该软件的人。
  • 所以你可以确认 Parent 和它的孩子之间只有一个真实的顺序,对吧?
  • 是的。但是,我在 Leito 的回答中找到了我需要的信息。感谢您的帮助。

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


【解决方案1】:

对于您提到的冒泡,有像 ranked-model 和 acts_as_list 这样的宝石可以为您处理。通常它们有一个底层的x_position 字段,您不直接编写该字段,因此 gem 会为您处理更新。您只需添加到“列表”中的末尾、开头或特定位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多