2013-11-20 41 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 
相關問題