0

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

@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

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

4

3 回答 3

1

尝试:

Community has_many :uniquecodes
Uniquecode has_many :users

这应该使这项工作:

@community.uniquecodes.users.count.to_s
于 2013-01-23T18:53:19.470 回答
1

使用#try 进行方法链

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

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 是可链接的。

于 2013-01-23T19:01:09.270 回答
1

您的关系不清楚,也许您需要类似 has_many :through 关联的东西,但是“belongs_to :user”让我有点困惑,uniquecode 是什么意思?

尝试

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.users”

于 2013-01-23T19:15:14.493 回答