在我的Rails应用程序中,我在电影和标签之间有一个n:m的关系。 (has_and_belongs_to_many)
因此每个标签都可以分配给多部电影。
现在,当我向电影添加新标签时,我想检查是否已将此标签分配给此电影。
在rails中检查标签和电影之间是否存在关系的最简单方法是什么?
我用以下内容获取标记:
@tagfound = Tag.where("tagname = ?", data[:tagname])
可以使用以下内容获取包含电影中所有标签的列表:
@vid.tags
感谢您的帮助
答案 0 :(得分:2)
您可能不需要检查。你可以简单地做到这一点
movie.tags = [array, of, tags]
movie.save # note, you don't need to save. The line above saves.
或
movie.tag_ids = [1,2,3,4]
movie.save # note, you don't need to save. The line above saves.
这将负责设置新标签并删除不再连接的标签。适用于复选框UI或标记器。
要回答您的问题,要查找电影是否有标签,您可以执行此操作
tag.in?(movie.tags)
这是添加单个
的方法movie.tags << tag unless tag.in?(movie.tags)
[编辑] 如果你这样做
movie.update_attributes(movie_params)
其中一个参数是tag_ids,只有新标签有效(没有其他错误),电影才会保存。
答案 1 :(得分:0)
我相信有两种方法可以做到这一点。
检查@ vid.tags
中是否包含@tagfound @vid.tags << @tagfound
@vid.tags.uniq!
添加标签&amp;之后打电话给uniq。
{{1}}