【问题标题】:Why do I get an undefined method when calling model method为什么我在调用模型方法时得到一个未定义的方法
【发布时间】:2015-08-03 16:19:17
【问题描述】:
我有一个模型,方法如下
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
我得到一个方法未定义的方法错误。我不确定我做错了什么。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
【解决方案1】:
因为你定义了一个实例方法,而不是一个类方法。
能够打电话
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
【解决方案2】:
方法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>
希望现在更清楚
【解决方案3】:
您已经定义了一个实例方法,但您将其作为类方法调用。
@retailer = Legacy::Retailer.new
@retailer.retailer_options
会起作用