我有一个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
答案 0 :(得分:3)
如果订阅是User的属性,并且如果取消是Subscription的布尔属性,则可以执行...
def paid?
!subscription.cancelled? if subscription
end
where
只能在用户和订阅之间存在一对多关系时使用,或者可以在Subscription类本身上使用。
subscription.cancelled?
如果取消为假,如果它没有带有“not”符号,则会返回true,如果!subscription.cancelled?
中的符号未被取消,则返回true。
尾随... if subscription
的原因是处理用户没有订阅的情况,在这种情况下将返回false(nil)。