2012-04-23 25 views
3

我試圖根據是否構建條件「user」是「成員」。基本上我需要一種方法來檢查current_user.id是否與任何成員的user_id匹配。非工作代碼,我現在的問題是:Rails檢查用戶標識是否在數組中

<% if current_user = @page.members %> 
    you can view this content. 
<% end %> 

我在尋找沿着線的東西:「如果current_user.id存在於‘USER_ID’任何成員」。如果你正在使用一組ID

<% if @page.members.include? current_user %> 
    you can view this content. 
<% end %> 

,當然你需要稍微改變測試來尋找:

+2

可能重複[如何檢查我的數組是否包含一個對象-rvr](http://stackoverflow.com/questions/3343861/how-to-check-if-my-array-includes-an-object-導軌) – Thilo 2012-04-23 23:45:31

+0

你在使用設計嗎?如果是這樣,你可以使用signed_in?幫手。讓current_user在設計中自動暗示用戶已登錄。如果您不使用設計,我可以問爲什麼不?這是奇妙的記錄,容易覆蓋控制器等特定的東西。否則,我會建議看看邁克爾哈特爾的教程,通過這些教程,他會詳細介紹包括身份驗證在內的詳細用戶模型。 – saneshark 2012-04-23 23:46:02

+0

不,這個問題是不同的。 – BTHarris 2012-04-23 23:50:28

回答

12

事情是這樣的,根據你的問題的字段名:

<% if @page.members.map(&:user_id).include? current_user.id %> 
    You can view this content 
<% end %> 
+1

不需要先映射,試試enumerable#any? @ page.members.any {|?M | m.user_id == current_user.id}。 http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-any-3F – 2012-04-24 03:55:53

4

假設你@page.members變量包含一個數組,你可以使用include?方法當前用戶的ID:

<% if @page.members.include? current_user.id %> 
    you can view this content. 
<% end %> 
1
@member_ids = @page.members.map{|m| m.id()} 

然後檢查的條件如下

@memeber_ids.include? current_user.id() 
0

曾表示,前include?應該做的事。

我只是回答,告訴你一個叫CanCan的寶石,使得您可以訪問授權「幫手」。

爲什麼你應該使用CanCan而不是做你實際上在做什麼?

  1. 不要重蹈覆轍,大多數時候這是一個goob實踐。
  2. 您正在將業務邏輯放在視圖上(壞習慣)。
  3. CanCan最有可能已經開發了關於安全性和所有最佳實踐的思想。
  4. 您節省了一些開發時間。

對不起,如果我重複自己。

相關問題