帮助方法检查记录是否由rails中的当前用户拥有

时间:2013-01-28 16:25:56

标签: ruby-on-rails ruby-on-rails-3 authentication view-helpers

我正在建立一个rails 3应用程序,我正在使用设计来管理auth逻辑,但我很想知道是否有一个帮助方法来检查当前用户是否拥有一个对象(一个记录到db)协会“has_many”。

示例:

User

has_many :reports 

我遇到这种情况:

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

可以创建类似的东西:

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

感谢

2 个答案:

答案 0 :(得分:12)

助手:

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

用法:

<%= owned(report) ? "yes" : "no" %>

答案 1 :(得分: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对象和Integer(user_id)。

与User:

关联的每个模型的通用方法

辅助方法可以解决这个问题:

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;如果nilcurrent_user,则nil或对象没有{{1}属性。