10
假设我有项目,即与标记多对多关联。我正在使用has_many到,所以我有单独的连接模型。验证Rails中多对多关联的唯一性
如何创建验证,检查连接模型的唯一性?现在我只有
has_many :tags, :through => :taggings, :uniq => true
但是,这不保存验证。
假设我有项目,即与标记多对多关联。我正在使用has_many到,所以我有单独的连接模型。验证Rails中多对多关联的唯一性
如何创建验证,检查连接模型的唯一性?现在我只有
has_many :tags, :through => :taggings, :uniq => true
但是,这不保存验证。
我相信,应该允许连接模型验证在保存之前运行。所以你的情况:
class Project
has many :tags, :through => :taggings
validates_associated :taggings
end
class Taggings
belongs_to :tags
#your validations here....
end
class Tag
has_many :taggings
end
我想你想要的是validates_uniqueness_of:
class Taggings
belongs_to :tags
validates_uniqueness_of :tag_id, :scope => :project_id
end
这是我使用的是什么,并且效果很好。
嗨,但是当我用'project.tags << Tag.find_or_create_by_name>设计“添加一个重复的标签到''它引发了一个'ActiveRecord :: ValidateError'异常时,是否有一种方法可以静默地重复失败当标签是新的时添加标签没有问题?管理这个最好的方法是什么?谢谢 – 2012-04-18 09:40:52
有可能是一种更简单的方法来做到这一点,但我认为这只会添加非重复项目:'design_tags = Tag.find_or_create_by_name'Design' project.tags << design_tags.reject {| tag | project.tags.include?(tag)}' – 2012-04-18 21:21:55