可选参数导致Undefined Method错误

时间:2015-01-30 22:26:31

标签: ruby-on-rails ruby

我在Rails中有一个带有实例方法的模型。我希望此方法具有可选参数,但尝试使用可选参数会导致错误:

Class MyModel < ActiveRecord::Base

  def my_method(param1, param2 = another_defined_variable)
    instance_variable == param2
  end
end

现在,在Rails控制台,开发环境或测试环境中,如果我用不同数量的参数调用此方法,我会得到以下结果:

my_instace.my_method
# ArgumentError: wrong number of arguments (0 for 2) (expected error)

my_instance.my_method(:some_symbol)
# NameError: undefined local variable or method `my_method' for #<MyModel:0x007fb7a2d9fb50>

my_instance.my_method(:some_symbol, 1)
# Runs as expected.

导致第二个失败的原因是什么?我接近这个错误吗?

2 个答案:

答案 0 :(得分:2)

我认为您不能将参数默认为变量。为什么不这样做:

def my_method(param1, param2=nil)
  instance_variable == (param2 || another_defined_variable)
end

答案 1 :(得分:2)

class MyModel

  def my_instance_method(param1, param2 = 5)
    puts params2 
  end

  def self.my_class_method(param1, param2 = 5)
    puts param2
  end

end


obj = MyModel.new
obj.my_instance_method(4,2) #calls the instance one 
MyModel.my_class_method(4,2) #calls the class method. 

my_instance_method:您无法直接调用此方法。您必须创建MyModel类的实例,然后才能调用它。

my_class_method:这是一个类级方法,您可以使用类名直接调用它,即MyModel.my_class_method

关于默认参数:

您可以将其设置为params2 = 5.这意味着如果您没有为第二个参数传递任何值,那么5将被视为您的第二个参数值。但是如果你传递任何其他值,那么将为param2分配。