我有很多项目的列表模型。这些项目priority
在列表范围内具有唯一性。
class List < ActiveRecord::Base
has_many :items
accepts_nested_attributes_for :items
end
class Item < ActiveRecord::Base
validates :priority, uniqueness: { :scope => :list_id }
end
因此,如果我从 API 调用返回给定列表,它看起来像这样:
{
items: [
{ "id": 1, "priority": 1 },
{ "id": 2, "priority": 2 },
{ "id": 3, "priority": 3 }
]
}
用户在前端重新排列项目PUT
并向服务器发出请求
{
items_attributes: [
{ "id": 1, "priority": 3 },
{ "id": 2, "priority": 1 },
{ "id": 3, "priority": 2 }
]
}
但这会失败。当其中一个尝试保存时,它将检查是否存在具有相同列表 ID 和优先级的另一个项目。由于数据库中的其他项目尚未更新,因此此验证将失败。
如何实现此更新?