我想在我的数据库中保存一些字符串,但是只使用一行而不创建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验证器,这不是这里的情况, 它更多的是写指南。
谢谢
答案 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