2015-12-11 3 views
0

Я хотел бы сохранить ссылку на объект внутри подкласса StandardError.Переопределить инициализацию для подкласса StandardError

Мой первый инстинкт должен был переопределить initialize и назначить его (предоставление attr_reader), таким образом:

class UnprocessableCardError < StandardError 
    attr_reader :card 

    def initialize(msg, card = nil) 
     @card = card 
     super msg 
    end 
    end 

К сожалению, это приводит к backtrace must be Array of String, когда я использую fail, таким образом:

fail UnprocessableCardError, "Message", card_obj 
+1

Можете ли вы изменить свой вопрос, чтобы показать, как вы используете это с ' fail'? –

+0

@ Иордан, вы были верны в своем ответе, вопрос обновлен, спасибо! – dukedave

ответ

0

Я предполагаю, что вы пытаетесь сделать это:

fail UnprocessableCardError, "Message", card_obj 

Проблема заключается в том, что вы передаете три аргумента fail и fail ожидает третий аргумент, если он присутствует, является обратным концом, который, как ожидается, будет массивом строк.

Вы можете использовать свой класс исключений, хотя, как это:

fail UnprocessableCardError.new("Message", card_obj) 

Это работает, как ожидалось:

begin 
    fail UnprocessableCardError.new("Message", 12345) 
rescue UnprocessableCardError => ex 
    puts ex.card 
end 
# => 12345 
0

Мой ток менее удовлетворительным обходным путем является:

Который должен быть назван следующим образом:

fail UnprocessableCardError.with_card card, 'some reason' 
Смежные вопросы