2012-04-12 46 views
4

我有一個用戶模型這行代碼:滑軌:在設定器的Attr存取未定義的方法

attr_accessor :birthdate 

在相同的模型,我有嘗試通過這樣來設置的出生日期的方法:

self.birthdate = mydate 

其中mydate是Date對象。

我得到這個錯誤:undefined method birthdate='

這究竟是爲什麼?是不是attr_accessor創建一個setter和一個getter?

+1

重現問題的完整代碼 – 2012-04-12 23:20:26

回答

15

讓我猜,你從類方法調用setter,對吧?

class Foo 
    attr_accessor :bar 

    def set_bar val 
    self.bar = val # `self` is an instance of Foo, it has `bar=` method 
    bar 
    end 

    def self.set_bar val 
    self.bar = val # here `self` is Foo class object, it does NOT have `bar=` 
    bar 
    end 
end 

f = Foo.new 
f.set_bar 1 # => 1 
Foo.set_bar 2 # => 
# ~> -:10:in `set_bar': undefined method `bar=' for Foo:Class (NoMethodError) 
+0

正是我在找的東西。 – 2012-04-12 23:25:32

+2

你去那裏,upvote的猜測! – shime 2012-04-12 23:37:12