2013-06-01 15 views
1

的Ruby 1.9.3-P327,Rails的3.2.13ActiveRecord:不能使用關鍵詞標記作爲方法?

我有以下型號:

class ActivationToken < ActiveRecord::Base 
    before_save :create_token 

    attr_reader :token 

    private 

    def create_token 
     self.token = 'abc123' 
    end 
end 

當我創建一個新的ActivationToken記錄,並呼籲my_token.token我得到nil,但如果我參考作爲散列,my_token[:token]我得到一個值。

這是爲什麼?

+0

嘗試在刪除'attr_reader:token'後將其作爲'my_token.token'進行訪問。 – kiddorails

+0

如果將其設置爲attr_accessor,則它可以工作。我不希望該值可寫,因此將其聲明爲attr_reader。感覺像某種名稱相撞,但我無法找到它的情況。我在本地使用SQLite。 –

+0

在下面添加了答案;也許這將有助於 – kiddorails

回答

0

刪除attr_reader :token
Rails(4.0之前)使用attr_accessible來允許通過散列可寫和可訪問的屬性。
Rails 4.0使用strong parameters用於相同的目的。

在刪除attr_readerattr_accessible:token時,您的屬性將無法顯式寫入,但可以讀取;這是你想要的。

+0

我想知道ActivationToken和令牌是否會以某種方式相互競爭。我喜歡attr_reader,因爲它記錄了代碼的意圖。我現在可以堅持使用散列符號,但我只想了解它爲什麼這樣做。一旦我嘗試了更多的事情,我會更新 –

相關問題