2016-01-18 3 views
0

У меня есть приложение, с которым я работаю с Rails 3.2.x и Bootstrap 2. У меня есть помощник вида, который возвращает другой текст, основанный на статусе и атрибутах вызова.Rails view helper display badge and text

def status(call) 
    if call.call_status == "open" && call.transfer_date > Time.zone.now + 15.minutes 
    "Scheduled" 
    elsif call.wait_return == "yes" && call.call_status == "open" 
    "Active/Wait and Return" 
    elsif call.call_status == "close" 
    "Closed Call" 
    elsif call.call_status == "cancel" 
    "Cancelled Call" 
    else 
    "Active" 
    end 
end 

Я хотел бы реорганизовать это где текст каждого условия возвращает самозагрузку знака с текстом внутри него. Я просмотрел документы API для content_tag, и я думаю, что это то, что мне нужно, но я не уверен на 100%, как это сделать.

Любая помощь или рекомендации по рефакторингу были бы весьма полезными.

ответ

2

Я хотел бы начать с расщеплением, что большой метод на мелкие, что-то вроде этого:

class Call 
    def scheduled? 
    call_status == "open" && call.transfer_date > Time.zone.now + 15.minutes 
    end 

    def closed? 
    call_status == "close" 
    end 

    ... 
end 

Тогда ваш метод status будет выглядеть следующим образом:

def status(call) 
    text = case 
    when call.scheduled? 
     "Scheduled" 
    when call.cancelled? 
     "Active/Wait and Return" 
    when call.closed? 
     "Closed Call" 
    end 
    content_tag(:span, text, class: "badge") 
end 

Надеется, что это поможет вам реорганизовать код.

+0

Спасибо за совет. Я знал, что я что-то пропускаю. Это отличное начало. :) – nulltek