【发布时间】:2011-03-30 06:35:52
【问题描述】:
A 有两个模型,“shop”和“product”,通过 has_many :through 链接。
在商店表单中有多个产品的嵌套属性,我在产品的唯一性验证方面遇到了一些麻烦。如果我输入一个产品,保存它,然后尝试为新产品输入相同的名称,唯一性验证会成功触发。
但是,如果我在同一个嵌套表单的 2 行中输入相同的产品名称,则该表单被接受 - 不会触发唯一性验证。
我猜这是一个相当普遍的问题,但我找不到任何简单的解决方案。有人对确保在相同嵌套表单中遵守唯一性验证的最简单方法有任何建议吗?
编辑:下面包含的产品型号
class Product < ActiveRecord::Base
has_many :shop_products
has_many :shops, :through => :shop_products
validates_presence_of :name
validates_uniqueness_of :name
end
【问题讨论】:
-
你的
product是什么样的? -
您始终可以 (and should!) 使用数据库中的唯一索引来支持唯一性验证。它会像你看到的那样停止重复,但它不会很好 - 它只会在保存时抛出异常......也许你可以编写一个自定义验证函数来处理这个问题?
-
Jeffrey:上面添加的产品模型
-
泽维尔:点头干杯。我肯定会在数据库中添加一个索引。看起来自定义验证可能是解决方案......只是有点惊讶似乎没有内置任何东西。
标签: ruby-on-rails ruby-on-rails-3 validates-uniqueness-of