我正在建立一个rails 3应用程序,我正在使用设计来管理auth逻辑,但我很想知道是否有一个帮助方法来检查当前用户是否拥有一个对象(一个记录到db)协会“has_many”。
示例:
User
has_many :reports
我遇到这种情况:
<%= current_user.id == report.user.id ? "Personal Report" : report.user.username %>
可以创建类似的东西:
<%= owned ? "yes" : "no" %>
感谢
答案 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)。
辅助方法可以解决这个问题:
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_user
,则nil
或对象没有{{1}属性。