我试图显示拥有社区唯一代码的用户数量。
@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 是可链接的。