Rails检查对象是否也分配给另一个

时间:2016-05-16 17:42:48

标签: ruby-on-rails ruby ruby-on-rails-4

在我的Rails应用程序中,我在电影和标签之间有一个n:m的关系。 (has_and_belongs_to_many)

因此每个标签都可以分配给多部电影。

现在,当我向电影添加新标签时,我想检查是否已将此标签分配给此电影。

在rails中检查标签和电影之间是否存在关系的最简单方法是什么?

我用以下内容获取标记:

@tagfound = Tag.where("tagname = ?", data[:tagname])

可以使用以下内容获取包含电影中所有标签的列表:

@vid.tags

感谢您的帮助

2 个答案:

答案 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)

我相信有两种方法可以做到这一点。

  1. 检查@ vid.tags

    中是否包含@tagfound

    @vid.tags << @tagfound @vid.tags.uniq!

  2. 添加标签&amp;之后打电话给uniq。

    {{1}}