轨道上的红宝石 - 当'nil'某些嵌套记录时,如何使用'count'获取数字



我试图显示拥有社区唯一代码的用户数量。

@community.uniquecodes.users.count.to_s

为什么会返回此错误?

undefined method `users' 

请考虑唯一代码可能仍然存在,但用户被删除!

我的联想是这样的

User has_many :communities
     has_many :uniquecodes
Community belongs_to :user
          has_many :uniquecodes
Uniquecode belongs_to :user
           belongs_to :community

如何获取拥有社区唯一代码的用户数量。

你的关系不清楚,也许你需要一个类似 has_many :through 关联的东西,但"belongs_to :user"让我有点困惑,唯一代码是什么意思?

尝试使用

User has_one :community
     has_many :uniquecodes
     has_many :communities, :though => :uniquecodes
Community belongs_to :user
          has_many :uniquecodes
          has_many :users, :through => :uniquecodes
Uniquecode belongs_to :user
           belongs_to :community

另外,我想唯一代码只是一个连接模型,所以如果用户被删除,它不应该在那里(has_many,:through 关联会自动处理这个问题)

这样你就可以做"社区用户"

尝试:

Community has_many :uniquecodes
Uniquecode has_many :users

这应该使这项工作:

@community.uniquecodes.users.count.to_s

使用 #try 进行方法链接

Rails Object#try 方法在对可能为 nil 的对象调用方法时很有用。请考虑以下事项:

1.9.3p362 :001 > @foo = []
 => [] 
1.9.3p362 :002 > @foo.count
 => 0 
1.9.3p362 :003 > @foo = nil
 => nil 
1.9.3p362 :004 > @foo.count
NoMethodError: undefined method `count' for nil:NilClass
1.9.3p362 :005 > @foo.try(:count)
 => nil 

@community.uniquecodes.users.count.to_s这样的方法链的一个问题是,如果链上的任何方法返回 nil,你最终会在 NilClass 的实例上调用以下方法。:try 方法可防止在这种情况下引发 NoMethodError 异常,并且有点类似于调用 @foo.some_method rescue nil 。但是,与救援子句不同,Object#try 是可链接的。

相关内容

  • 没有找到相关文章

最新更新