问题描述
|
这是关联以及相关的依赖关系和验证
帖子模型:
发表has_many:post_tags
发布has_many:tags,:through =>:post_tags
标签模型:
验证:content,:uniqueness => true
问题是这样的:
当我想为帖子分配标签(即post.tags << new_tag)时,如果数据库中已经存在具有相同内容的标签,则操作会失败,因为唯一性验证失败。
所需的行为是这样的:将新标签分配给帖子时
-如果标签已经存在,则不要尝试创建新标签,而只能创建post_tag关系。这样可以避免唯一性验证失败,但仍将标签分配给帖子
如果标签不存在,则创建一个新标签以及一个post_tag关系。
有什么干净的方法可以做到这一点?
谢谢,
-p.s.我正在考虑的两种方法是手工创建关联,即不使用嵌套属性功能。或在UserPost模型中覆盖AvtiveRecords的\'autosave_associated_records_for_tags \'方法,该方法处理关联模型的自动保存(在本例中为标签),并对其进行修改以在尝试保存标签之前检查标签是否存在
解决方法
用户find_or_create_by_ {attr}
http://api.rubyonrails.org/classes/ActiveRecord/Base.html