2015-11-03 36 views
0

我有我的User类中定义这个方法:为什么我的`User`类定义的方法不断返回未定义的方法?

def two_way_exists_with?(user1, user2) 
    return true if number_of_memberships(user1, user2) == 2 
    end 

当我试图从我的控制台称它为我不断收到undefined method错误。

[3] pry(main)> two_way_exists?(u1, u2) 
NoMethodError: undefined method `two_way_exists?' for main:Object 
from (pry):3:in `__pry__' 
[4] pry(main)> u1.two_way_exists?(u1, u2) 
NoMethodError: undefined method `two_way_exists?' for #<User:0x007fe9e7eda228> 
from /[email protected]/gems/activemodel-4.1.12/lib/active_model/attribute_methods.rb:435:in `method_missing' 
[5] pry(main)> User.two_way_exists?(u1, u2) 
NoMethodError: undefined method `two_way_exists?' for #<Class:0x007fe9eaabf0a0> 
from /[email protected]/gems/activerecord-4.1.12/lib/active_record/dynamic_matchers.rb:26:in `method_missing' 

如何调用此方法?

+0

您定义了一个名为'two_way_exists_with?'的方法,并尝试调用一个名为'two_way_exists?'的方法。注意名字中缺少'_with'。 –

+0

zomg ....感谢您的提示。那么称呼它的正确方法是什么?在'u1'对象上,'User'类还是两者都不? – marcamillion

+0

没有看到你确切地定义了方法的地方,你可能已经定义了一个实例方法。这些都可以在你的课堂上使用,例如可能在'u1'上。一般来说,你应该得到一本Ruby的入门书,并学习一些关于方法范围的知识。这是您一直需要的超级基本功能! –

回答

2

如果你已经在你的User类中定义了它,就像你说明的那样,那么它是一个实例方法,并且你将用户作为接收者来运行它。

例如

u1.two_way_exists_with?(u1, u2) 

然而,因为它是一个实例方法,你已经提供给您的用户对象之一为self所以你只需要在其他用户传递。

def two_way_exists_with?(other_user) 
    return true if number_of_memberships(self, other_user) == 2 
end 

u1.two_way_exists_with?(u2) 

由于number_of_memberships大概也是一个实例方法,有很好的机会,你不需要两个用户进入该方法无论是。

相关问题