之后如何正确调用实例方法和类方法

时间:2013-11-20 15:52:40

标签: ruby class instance

我想在我的数据库中保存一些字符串,但是只使用一行而不创建Object的实例,例如:

Secret.add('SuperSecret')

所以我有以下课程:

class Secret
  include MongoMapper::Document
  [some keys...]

def self.add(secret)
  if not secret.is_a? String
    return 'Not a string'
  end

  s = Secret.new(secret)
  s.save
end

但那看起来并不好......

请不要告诉我我可以使用MongoMapper验证器,这不是这里的情况, 它更多的是写指南。

谢谢

2 个答案:

答案 0 :(得分:1)

class SecretTypeError < StandardError; end

def self.add(secret)
  unless secret.is_a?(String)
    raise SecretTypeError, "Expected type String, got #{secret.class}"
  end

  self.new(secret).save
end

引发错误而不是返回字符串,或者至少返回false以便您可以测试它。或者,使用字符串验证程序,并将add方法替换为new

答案 1 :(得分:0)

您可以使用self.new代替Secret.new。由于add方法是一种类方法,因此可以跳过self。像这样的东西会起作用:

class Secret
  include MongoMapper::Document

  key :secret, String

  def self.add(secret_key)
    raise "Not a string" unless key.is_a?(String)

    s = new(secret: secret_key)
    s.save
  end
end