Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord:无法将关键字标记用作方法?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord:无法将关键字标记用作方法?

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

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
当我创建一个新的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,因为它记录了代码的意图。我现在可以坚持使用散列符号,但我只想了解它为什么这样做。一旦我尝试了更多的东西,就会更新