为什么在我的`User`类上定义的方法会继续返回未定义的方法?

时间:2015-11-03 20:03:01

标签: ruby-on-rails ruby-on-rails-4

我在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 /ruby-2.1.6@global/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 /ruby-2.1.6@global/gems/activerecord-4.1.12/lib/active_record/dynamic_matchers.rb:26:in `method_missing'

如何调用此方法?

1 个答案:

答案 0 :(得分:2)

如果您在说明中已在User类中定义了它,那么它就是一个实例方法,您可以将其作为接收方运行。

e.g。

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可能也是一种实例方法,因此您也不需要将两个用户传递给该方法。