2012-07-31 54 views
0

使用devise,rails 3.2。我想弄清楚如何創建一個ID數組,然後檢查current_user的ID是否包含在這個數組中。在Ruby中創建數組並搜索通過

我的用戶通過location_users有許多地點。 (地點必須通過相同的關係,許多用戶。)

我可以與位置相關聯user_ids的名單沒有問題:

@location.users.each do |u| 
    puts u.id 

不過,我想我需要輸出的ID到一個數組,檢查與這樣的事情:

- [user_ids].include? current_user.id 

我該如何去實現這一目標?

回答

0
@location.users.map(&:id).include? current_user.id 

或者更確切地說,只是

@location.users.include? current_user 

應該工作,但涉及加載所有location.users然後通過陣列搜索。我會考慮編寫一個讓數據庫處理這個問題的語句。

更新:這裏有一個方法,你如何讓數據庫處理您要檢查,如果用戶5在位置1它說:

LocationsUser.where(location_id: 1).find_by_user_id(5) 

這將返回要麼協會(LocationsUser的實例),或者爲零。

+0

剛剛嘗試了以下工作正常,但似乎有點ott ... @ location.users.map(&:id).flatten.uniq.include?(current_user.id) – simonmorley 2012-08-01 00:00:15

+1

而不是'@ location.users。 map(&:id)',嘗試'@ location.users.pluck(:id)',這樣你就不會創建不必要的對象。 'pluck'將只會自動從數據庫中選擇ID作爲獎勵。 – x1a4 2012-08-01 00:01:41