在轨道上的字段与方法ruby

时间:2012-11-21 15:14:47

标签: ruby mongoid

我有这堂课:

class User
  include Mongoid::Document
  field :revenues, :type => Integer, :default => nil
  attr_accessible :revenues
  #now method
  def revenues
   return 1
  end
end

为什么在控制台中我得到1而不是nil

1.9.3-p125 :002 > u.revenues
 => 1 

哪个有优先权,方法还是领域?如何创建一个具有与字段相同功能的方法?

1 个答案:

答案 0 :(得分:0)

field宏在Mongoid :: Document中定义。它既不是Ruby的合成特性,也不是Rails的合成特性。

您的代码发生了以下情况:

  1. field函数会为您创建一些方法,其中一个方法称为revenues
  2. 当您创建另一个名为revenues的方法时,您实际上会覆盖以前定义的方法,因此无法使用它。
  3. 简短回答:我不了解Mongoid的拉链,但即使你再次定义了一个名为revenues的方法,你的字段仍然存在。唯一的缺点是你不能再通过调用myUser.revenues来访问它了。

    尝试进行测试:使用符号some_user[:revenues]访问您的字段,看看会发生什么:)

    祝你好运