Ruby on rails ActiveRecord:无法将关键字标记用作方法?
Ruby 1.9.3-p327,Rails 3.2.13 我有以下型号:Ruby on rails ActiveRecord:无法将关键字标记用作方法?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,Ruby 1.9.3-p327,Rails 3.2.13 我有以下型号: class ActivationToken < ActiveRecord::Base before_save :create_token attr_reader :token private def create_token self.token = 'abc123' end end class ActivationToken
class ActivationToken < ActiveRecord::Base
before_save :create_token
attr_reader :token
private
def create_token
self.token = 'abc123'
end
end
class ActivationToken
当我创建一个新的ActivationToken记录并调用my_token.token
时,我得到nil
,但如果我引用的是散列,my_token[:token]
我得到一个值
为什么会这样?删除
attr\u阅读器:令牌
Rails(4.0之前)使用
attr\u accessible
来允许可写的属性,并且可以通过哈希访问这些属性。Rails 4.0用于相同的目的
在为
:token
删除attr\u reader
和attr\u accessible
时,您的属性将无法显式写入,但可以读取;这就是你想要的 尝试将其作为my_token.token
访问。删除attr_reader:token
后,如果我将其设置为attr_访问器,它会工作。但我不希望该值是可写的,因此将其声明为attr_reader。感觉像是名字冲突,但我找不到会发生这种情况的地方。我在本地使用SQLite。下面添加了答案;也许这会有所帮助我想知道ActivationToken和token是否会以某种方式相互竞争。我喜欢attr_reader,因为它记录了代码的意图。我现在可以坚持使用散列符号,但我只想了解它为什么这样做。一旦我尝试了更多的东西,就会更新