NoMethodError未定义的方法`where'

时间:2014-07-14 20:35:03

标签: ruby-on-rails

我有一个NoMethodError undefined method `where' for <Subscription:0x000001083aee00>。它指向subscription.where(cancelled: nil).exists?行上的用户模型。

在视图中,我尝试设置if语句,以便向订阅者表中的取消状态不为零的用户显示选择内容。

用户模型:

  has_one :subscription

    def paid?
      subscription.where(cancelled: nil).exists?
    end

应用程序的其他部分从一开始就存在has_one关系。当我添加belongs_to关系时,我收到错误undefined method `where' for nil:NilClass

1 个答案:

答案 0 :(得分:3)

如果订阅是User的属性,并且如果取消是Subscription的布尔属性,则可以执行...

def paid?
  !subscription.cancelled? if subscription
end

where只能在用户和订阅之间存在一对多关系时使用,或者可以在Subscription类本身上使用。

subscription.cancelled?如果取消为假,如果它没有带有“not”符号,则会返回true,如果!subscription.cancelled?中的符号未被取消,则返回true。

尾随... if subscription的原因是处理用户没有订阅的情况,在这种情况下将返回false(nil)。