2010-02-18 82 views
2

假设我有一个博客应用程序。每篇文章都有评论。是给定集合中的对象吗?

所以,我的意见在“Post.comments”

集合比方说,我有一个名为对象“this_comment”

有一个神奇的关键字或用Ruby构建,这样我可以测试“Post.comments”中的'this_comment'?

换句话说,我想知道“this_comment”是否为集合“Post.comments”的成员。我可以做一个'找到'并得到我的答案,但它似乎是那种Ruby可能通过一个很酷的关键字,如“如this_comment.in(Post.comments)”容易

我想如果不是,我可以写我自己的“评论”方法(或'is_in'方法,因为我认为'是'是保留关键字)。

谢谢!

回答

6

为数组,你可以做

[:a, :b, :c].include?(:a) 

但是ActiveRecord的做一些很酷的东西,以保持你的查询理智,如果你正在处理的模型。假设评论是某种类型的命名范围或关联中,你可以这样做:

Post.comments.exists?(this_comment.id) 

命名范围和协会可以有漂亮的ActiveRecord类方法调用它多少都

+0

甜。正是我在找的东西。 – jefflunt 2010-02-18 20:19:31

+0

'comments'是一个数组,还是只是像一个嘎嘎声? – 2010-02-18 22:06:42

+0

如果它是一个'named_scope'或者一个关联就像一个嘎嘎声。如果您调用通常在数组上调用的方法,它应该执行查询并将其转换为数组。但是,除非需要为查询添加特殊性,否则它不会这样做。上述代码在调用'exists?'方法之前不会执行SQL查询。 'comments'只是返回一个代理对象。但是'Post.comments.each'就像'comments'是一个数组一样工作。 – 2010-02-18 22:43:35

1

你是如何定义的关系'发布'和'评论'?发布has_many评论?

如果是这样,请尝试.exists?()