2013-11-20 3 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

Сомневайтесь, вы можете, конечно, аккуратно его поднять. return 'Не строка', если secret.is_a? Строка, за которой следует Secret.new (секретный) .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 

Raise ошибку вместо возврата строки, или по крайней мере возвращения 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 
Смежные вопросы