`NoMethodError`,即使该方法在`instance_methods`列表中

时间:2013-08-01 19:48:42

标签: ruby-on-rails instance-methods

使用下面的代码,当我尝试在调试器点使用我的代码时(尝试使用Song类的'rating'访问器),为什么我会得到

NoMethodError Exception: undefined method "rating" for #<Class:0xb3b7db04>

尽管Song.instance_methods清楚地表明:rating:rating=在列表中?

-

#songs_controller.rb
class SongsController < ApplicationController    
    def index
        debugger
        @ratings = Song.rating
    end
end

-

#schema.rb
ActiveRecord::Schema.define(:version => 20111119180638) do
    create_table "songs", :force => true do |t|
        t.string   "title"
        t.string   "rating"
  end
end

-

#song.rb
class Song < ActiveRecord::Base
    attr_accessor :rating
end

1 个答案:

答案 0 :(得分:4)

在下面的代码中,您在Song上调用rating这是一个类,这就是它抛出错误的原因。 Song.instance_methods清楚地表明:rating和:rating =在Song类列表中作为实例方法。您可以在Song.new实例上调用该方法,但不能在Song类上调用。

你应该这样称呼评级方法:

  @rating = Song.new.rating

  Song.new.rating = "good"

取代这个:

   @ratings = Song.rating

希望它会有所帮助。感谢