用于名称的MongoID帮助方法

时间:2013-12-29 20:05:50

标签: ruby-on-rails ruby mongodb ruby-on-rails-4 mongoid

嘿我怎样才能在我的MongoID模型中创建一个方法,该方法将返回名称字段的用户名字段值未设置。

因此,如果我有一个用户...而且user.name是Thomas,那么在调用user.name时你会得到Thomas。如果未设置user.name并且您调用user.name,则它将在仍调用user.name时返回用户的用户名。我想这样做是为了安全起见。有可能吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以用以下内容覆盖name访问者:

class User
  include Mongoid::Document

  field :username, :type => String
  field :name,     :type => String

  def name
    # You can access the fields by name using `model[field_name]`
    # or `model.attributes[field_name]`
    self['name'] || self['username']
  end
end

或者,您可以将lambda用作:name的默认值:

class User
  include Mongoid::Document

  field :username, :type => String
  field :name,     :type => String, :default => lambda { self.username }
end

在任何一种情况下,如果设置u.name:name将为您提供:username字段,否则为user.name == ''

如果"未设置"可能意味着user.name.nil?而不是def name self['name'].present?? self['name'] : self['username'] end ,那么你就可以修改第一种方法:

{{1}}