如何确保我在模型中放入的方法可以从外部访问?

时间:2011-10-03 20:39:10

标签: ruby-on-rails ruby

假设我有一个简单的模型:

class Subscription < ActiveRecord::Base
  attr_accessor :subscribed

  def subscribed
    @subscribed = Subscription.where(task_id, user_id)
    !@subscribed.empty?
  end

end

我想确保我可以使用@subscription实例并调用@ subscription.subscribed - 目前它无法找到该方法。

4 个答案:

答案 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? issueIssue.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

希望这有帮助。