2010-08-06 84 views
1
named_scope :all_public, lambda { |users| 
     { :conditions => ["visibility = ? || (visibility = ? && user_id = ?)", Shared::PUBLIC, Shared::PRIVATE, users] } 
    } 

這對一個用戶很好,但有沒有辦法修改它的用戶是一個用戶id數組?Ruby on Rails:命名範圍與lambda和一個數組

+0

那真的是'||'和''&&而不是'或'和'和'? – bjg 2010-08-06 19:00:43

+0

當我學習SQL時,我使用了符號而不是單詞。 = \但我猜MySQL可以兼得。 – NullVoxPopuli 2010-08-06 20:21:34

回答

1

像這樣的東西,然後就通過一個單一的元素數組一個標識的情況下

named_scope :all_public, lambda { |users| 
     { :conditions => ["visibility = ? OR (visibility = ? AND user_id IN (?))", Shared::PUBLIC, Shared::PRIVATE, users.join(',')] } 
    } 
+0

我認爲你需要收集ID的工作:users.collect(&:id).join(',') – mark 2010-08-06 19:05:13

+0

@mark是的,你會是正確的,如果參數是一個'用戶'對象,但我從這個問題理解它將是一個ID數組。無論哪種方式,我同意,調用者必須在指定範圍之前或之內執行「收集」 – bjg 2010-08-06 19:30:40

+0

如果您是爲單個用戶工作,那麼它也需要一個ID。命名約定是怪罪。 :) – mark 2010-08-06 19:41:18