覆盖Mongoid模型的setter和getter

GTD*_*Dev 12 ruby mongoid

有没有办法在Mongoid中覆盖模型的setter或getter?就像是:

class Project
  include Mongoid::Document
  field :name, :type => String
  field :num_users, type: Integer, default: 0
  key :name
  has_and_belongs_to_many :users, class_name: "User", inverse_of: :projects

  # This will not work
  def name=(projectname)
    @name = projectname.capitalize
  end
end
Run Code Online (Sandbox Code Playgroud)

name不使用虚拟字段的情况下可以覆盖方法?

san*_*rew 24

更好用

def name=(projectname)
  super(projectname.capitalize)
end
Run Code Online (Sandbox Code Playgroud)

方法

self[:name] = projectname.capitalize
Run Code Online (Sandbox Code Playgroud)

可能是危险的,因为它会导致超载会导致无休止的递归

  • 如果没有超级班,怎么可能超级工作?`Mongoid :: Document`作为模块包含在内,我在这里很困惑...... (2认同)

rub*_*ish 16

def name=(projectname)
  self[:name] = projectname.capitalize
end
Run Code Online (Sandbox Code Playgroud)