我有一个带有以下方法的模型
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
我得到一个方法未定义的方法错误。我不确定我做错了什么。
答案 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
将起作用