2010-02-18 84 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?()