Представление Rails - при ошибке «попробовать» отобразить что-то еще

У меня есть эта переменная:

@preview

Это либо хеш, заполненный замечательными данными, либо строка с некоторым значением, например preview is unavailable.

У меня есть этот код здесь (slim/rails):

.well
  .preview-data
    - @preview.try(:each) do |line_number, line_data|
        .line#{line_number} = line_data

Как заставить представление отображать сообщение в случае сбоя @preview.try(:each)?

Что я пробовал:

- if @preview.try(:each) 
    @preview.each do |line_number, line_data|
...
- else
    .preview-unavailable = @preview

который просто отображает данные @preview в любом случае.


person Jeff    schedule 27.03.2015    source источник
comment
Ниже приведен правильный ответ, но в целом я бы посоветовал избегать проверки типов. Наличие переменной X, Y или Z вызовет у вас головную боль. В вашем конкретном случае я бы предпочел вернуть пустой хэш, проверить его и напечатать сообщение на основе результата.   -  person Drenmi    schedule 27.03.2015
comment
Что я собственно и сделал.   -  person Jeff    schedule 02.04.2015


Ответы (1)


person    schedule
comment
Это «противоречит» сути Ruby Ducktyping? Имеет ли значение, работает ли он? - person Jeff; 27.03.2015
comment
@Джефф, если вы хотите поддерживать утиную типизацию, но знаете, что, скажем, эквивалент String никогда не будет поддерживать методы перечисления, вместо этого вы можете протестировать с помощью if @preview.respond_to?(:each) и выполнить итерацию по истинному условию. - person Mori; 27.03.2015