2012-04-23 71 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. 您节省了一些开发时间。

对不起,如果我重复自己。