acts_as_list 在 has_many :through 和 sortablejs

acts_as_list on has_many :through and sortablejs

我有一个相当大的问题,在阅读了一整天的文章、文档和其他 Stack 问题后我一直无法解决。在这一点上,它只是在扰乱我的思想!

我有一个前端 Vue/Vuetify 的应用程序,我希望能够使用 sortablejs 重新排序数据-table。在后端,我有一个 Rails API,我想使用 acts_as_list gem 来为我处理重新排序。

理想情况下 我可以调用类似 Category.first.items.last.move_higher 的东西,但是因为我有一个连接模型,所以我不得不把 acts_as_list 和连接模型上的位置列而不是项目模型。有没有更好的安排方式?

category.rb

class Category < ApplicationRecord
  has_many :categories_items
  has_many :items, through: :categories_items, source: :item

  accepts_nested_attributes_for :items

end

item.rb

class Item < ApplicationRecord
  has_many :categories_items
  has_many :categories, through: :categories_items, source: :category

end

类别_item.rb

class CategoriesItem < ApplicationRecord
  belongs_to :category
  belongs_to :item

  acts_as_list scope: :category
end

使用该结构,您肯定需要通过调用连接模型上的方法来重新排序。但是,如果您愿意,可以使用 Rails delegate class 方法将重新排序方法委托给连接模型:

https://api.rubyonrails.org/classes/Module.html#method-i-delegate

所有这些假设您需要 itemscategories 来建立 has_and_belongs_to_many 类型的关系。