2013-11-20 88 views
0

我想保存在我的数据库中的某些字符串,但只用一条线没有对象的创建实例,如:如何正确地调用一个实例方法和类方法之后

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

怀疑你可以,你当然可以把它整理起来。返回'不是一个字符串'除非secret.is_a?字符串,然后是Secret.new(secret).save –

回答

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

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 
相关问题