假设我有一个简单的模型:
class Subscription < ActiveRecord::Base
attr_accessor :subscribed
def subscribed
@subscribed = Subscription.where(task_id, user_id)
!@subscribed.empty?
end
end
我想确保我可以使用@subscription实例并调用@ subscription.subscribed - 目前它无法找到该方法。
答案 0 :(得分:2)
我认为你正在做类似的事情:
@subscription = Subscription.where(task_id, user_id)
@subscription.subscribed
而不是像这样:
@subscription = Subscription.where(task_id, user_id).first
@subscription.subscribed
这只是猜测。
答案 1 :(得分:0)
我认为问题出在where
电话上。试试这个:
class Subscription < ActiveRecord::Base
belongs_to :task
belongs_to :user
attr_accessor :subscribed
def subscribed?
@subscribed ||= !Subscription.where(:task_id => task.id, :user_id => user.id).empty?
end
end
如果我正确理解你要做的事情,我认为这应该有用。
但在Subscription
模型上使用此方法对我来说仍然没有多大意义。如果存在订阅则不意味着用户自动订阅。这是否意味着是一种阶级方法?我认为user.subscribed_to? issue
或Issue.has_subscriber? user
会是处理此问题的更好地方。
答案 2 :(得分:0)
如果我理解你的问题,你可以这样做:
class Subscription < ActiveRecord::Base
attr_accessor :subscribed
def subscribed?
@subscribed = Subscription.where(task_id, user_id)
!@subscribed.empty?
end
end
你可以做(a.i):
s = Subscription.first
s.subscribed? # true or false
s.subscribed # the object (@subscribed)
答案 3 :(得分:0)
根据评论中的错误,名为@subscription
的对象并未指向Subscription
的实例,而是指向关系。
可能你做过像
这样的事情@subscription = Subscription.where(... some condition ...)
返回一个关系,您可以将其作为数组访问。因此,请调用.first
以获取第一个元素。或者使用Subscription.find
。
希望这有帮助。