2

我正在构建一个 Rails 3 应用程序,我正在使用设计来管理身份验证逻辑,但我想知道是否有一个帮助方法来检查当前用户是否拥有一个具有关联“has_many”的对象(数据库中的记录) ”。

例子:

User

has_many :reports 

我有这种情况:

<%=  current_user.id == report.user.id ? "Personal Report" : report.user.username %>

可以创建类似的东西:

<%= owned ? "yes" : "no" %>

谢谢

4

2 回答 2

13

帮手:

def owned(report)
    current_user.id == report.user_id
end

用法:

<%= owned(report) ? "yes" : "no" %>
于 2013-01-28T16:28:58.163 回答
6

您可以在Report模型中定义此方法:

型号限制:

class Report < ActiveRecord::Base

  def owned_by?(user)
    self.user_id == (user.try(:id) || user)
  end

然后像这样使用它:

<%= report.owned_by?(current_user) ? 'yes' : 'no' %>

owned_by?(user)方法接受用户对象和整数 (user_id)。

与用户关联的每个模型的通用方法:

辅助方法可以解决问题:

module OwnerHelper
  def is_owner?(object)
    return nil if(current_user.nil? || !object.respond_to(:user_id))
    current_user.try(:id) == object.try(:user_id)
  end
end

true如果current_user是所有者,此助手将返回,如果不是,则返回 false,nil如果current_usernilOR,则对象没有user_id属性。

于 2013-01-28T16:40:30.027 回答