Rails 检查用户 ID 是否在数组中

5

我正在尝试根据“用户”是否为“成员”来构建条件。基本上,我需要一种检查当前用户id是否与任何成员的user_id匹配的方法。目前我有以下无法工作的代码:

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

我正在寻找类似这样的内容:“如果当前用户ID存在于任何成员的“user_id”中。”

2
可能是重复的问题:如何检查我的数组是否包含一个对象 - Rails - Thilo
你是否在使用Devise?如果是,你可以使用signed_in?助手。在Devise中拥有current_user自动意味着用户已登录。如果你没有使用Devise,我可以问一下为什么不用吗?它的文档非常好,容易覆盖控制器等特定内容。否则,我建议你看看Michael Hartle的教程,他会详细介绍包括身份验证在内的用户模型。 - saneshark
不,这个问题是不同的。 - BTHarris
4个回答

13
根据问题中的字段名称,可以像这样实现:
<% 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 - Jeff Perrin

6
假设你的@page.members变量包含一个数组,你可以使用include?方法:(参考链接)
<% if @page.members.include? current_user %>
  you can view this content.
<% end %>

如果您正在使用ID数组,则需要稍微更改测试以查找当前用户的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. 大多数情况下,不要重复造轮子是一个好习惯。
  2. 你正在将业务逻辑放在视图上(不好的实践)。
  3. CanCan很可能是针对安全性和所有最佳实践开发的。
  4. 你可以节省一些开发时间。

如果我重复了自己,请原谅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接