为什么在调用模型方法时会得到一个未定义的方法

时间:2015-08-03 16:19:17

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

我有一个带有以下方法的模型

 class Legacy::Retailer < ActiveRecord::Base
  belongs_to :retailers
  self.table_name = 'orim_retailers'

  def retailer_options
    retailers = Array.new
    self.display_name.each do |names|
      retailers << names
    end
  end

end

当我尝试从控制器调用此方法时

@retailer_options = Legacy::Retailer.retailer_options

我得到一个方法未定义的方法错误。我不确定我做错了什么。

3 个答案:

答案 0 :(得分:4)

因为你定义了一个实例方法,而不是一个类方法。

能够致电

Legacy::Retailer.retailer_options

你应该定义一个类方法:

  def self.retailer_options # note self here
    retailers = Array.new
    self.display_name.each do |names|
      retailers << names
    end
  end

如果您打算在实例上调用此方法,而不是类本身,则应该能够执行以下操作:

Legacy::Retailer.new.retailer_options

答案 1 :(得分:1)

方法retailer_options被定义为实例方法,您正在调用类方法。看看下面的代码:

class Foo
  def self.bar
    puts 'class method'
  end

  def baz
    puts 'instance method'
  end
end

如果你打电话:

Foo.bar # => "class method"
Foo.baz # => NoMethodError: undefined method ‘baz’ for Foo:Class

对于实例方法:

Foo.new.baz # => instance method
Foo.new.bar # => NoMethodError: undefined method ‘bar’ for #<Foo:0x1e820>

希望现在更清楚

答案 2 :(得分:0)

您已经定义了一个实例方法,但是您将其称为类方法。

@retailer = Legacy::Retailer.new
@retailer.retailer_options

将起作用