ruby-on-rails - Ruby on Rails - ActsAsList 在使用nested_attributes 时是否存在已知问题?
问题描述
我在使用nested_attributes 更新acts_as_list 位置时遇到问题,我一直在努力,发现问题仍然在模型级别发生(如下所示)。构建nested_attribute 对象并在其位置替换另一个对象时会出现问题。有没有人遇到过类似的问题或请指出我正确的方向?
设置:
class List < ActiveRecord
has_many :list_items, -> { order(position: :asc) }, dependent: :destroy, inverse_of: :list
accepts_nested_attributes_for :list_items, reject_if: :all_blank, allow_destroy: true
end
class ListItem < ActiveRecord
acts_as_list scope: [:list_id, { deleted_at: nil }]
belongs_to :list, inverse_of: :list_items
end
问题:
我遇到的问题是在建立一个新list_item
的来代替现有的。
例子:
list = ListItem.create
list.list_items.create(name: 'Item 1')
list.list_items.create(name: 'Item 2')
#ListItems output
list.list_items.first.position #=> 1
list.list_items.last.position #=> 2
# Re-Order
new_item = list.list_items.build(name: 'New Item 2', position: 2)
list.list_items.second.position = 3
#Output
list.list_items.first.position #=> 1
list.list_items.second.position #=> 3
list.list_items.last.position #=> 2
list.save
#Output
list.list_items.first.position #=> 1
list.list_items.second.position #=> 3
list.list_items.last.position #=> 2
此时一切似乎都工作正常,但是当我从数据库中重新加载“列表”时,我遇到了一个奇怪的问题......(此示例的默认列表项按“id”排序)
list.reload
#Output
list.list_items.first.position #=> 1
list.list_items.second.position #=> 4
list.list_items.last.position #=> 2
经过测试,似乎新插入项目下方的项目位置因新插入项目的数量而偏离。
有没有人遇到过同样的问题并在acts_as_list 本身的代码中发现了问题?
预先感谢您的任何帮助
解决方案
只需查看您的代码,您的 has_many 定义中有一个双逗号:
has_many :list_items, , -> { order(position: :asc) }, dependent: :destroy, inverse_of: :list
删除多余的逗号,看看会发生什么。我的猜测是订单没有被应用,因为它没有被提供并且 Rails 默默地忽略了 proc。
推荐阅读
- python - keras和tensorflow lite模型的预测差异
- c# - SQL 如何替换一个值
- python - 使用 python 和请求,如何进行正确的 POST 调用以及在哪里找到标头?
- android - FirebaseAppDistribution:appDistributionUpload gradle 命令中缺少应用程序 ID
- mysql - 跨列和行计算值的实例
- javascript - 使用 redux 钩子时使用 redux 操作的最佳选择是什么?
- sql - Impala 2.11:AnalysisException:选择列表中不支持子查询
- swift - 在 SwiftUI 中获取当前的经纬度
- c++ - 是否可以禁止一个类被动态转换为?
- git - Git - 将发布分支合并到主分支