gpt4 book ai didi

ruby-on-rails-3 - 如何在 Rails 3.2 中验证嵌套模型在其父模型范围内的唯一性?

转载 作者:行者123 更新时间:2023-12-03 00:16:12 24 4
gpt4 key购买 nike

这是我的问题的一个示例。

我有一个“房间”模型:

class Room < ActiveRecord::Base
has_many :items, :inverse_of => :room
accepts_nested_attributes_for :items
end

我有一个“元素”模型:

class Item < ActiveRecord::Base
belongs_to :room, :inverse_of => :items
validates :some_attr, :uniqueness => { :scope => :room}
end

我想验证属于某个房间的所有项目的 :some_attr 属性的唯一性。

当我尝试验证项目时,出现此错误:

TypeError (Cannot visit Room)

我无法将验证范围设置为:room_id,因为项目尚未保存,因此 id 为零。我还想防止在“Room”模型中使用自定义验证器。

Rails 中有没有干净的方法可以做到这一点?我还想知道我是否正确设置了 :inverse_of 选项...

最佳答案

我认为您使用 inverse_of 的方式没有任何问题。

至于问题,在类似的情况下,我最终在迁移中强制执行唯一性约束,如下所示

add_index :items, [ :room_id, :some_attr ], :unique => true

这是对 AR 级验证的补充

validates_uniqueness_of :some_attr, :scope => :room_id

(我不确定使用关联名称作为范围是否有效,当尝试引用数据库中不存在的 room 列时,数据库适配器是否会引发异常查询?)

关于ruby-on-rails-3 - 如何在 Rails 3.2 中验证嵌套模型在其父模型范围内的唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com