SyntaxError во вспомогательном методе вложенного тега

Итак, я пишу помощник, который поможет мне заполнить карусель начальной загрузки для Rails. Это фрагмент кода вспомогательного метода:

def carousel_item(element, active = false)          
    content_tag :div, class:"item"+(active ? " active" : "") do
        image_tag("carousel/"+element.name) +
        if !element.desc.nil? || !element.title.nil? || !element.link.nil? do
            content_tag(:div, {class:'container'}) do
                !element.title.nil? ? content_tag(:h1, element.title) +
                !element.desc.nil? ? content_tag(:p, element.desc, class:"lead") +
                !element.link.nil? ? link_to(element.linktitle, url_for(action: element.link), {class:"btn btn-large btn-primary"}) +
            end             
        end
    end     
end

Но затем я получаю эту ошибку:

app/helpers/application_helper.rb:22: синтаксическая ошибка, неожиданный ключевой_конец, ожидается ':'

указывая после последнего конца перед закрытием метода ... часами борясь с этой вещью, до сих пор не могу найти решение.


person Andres Perez    schedule 12.12.2012    source источник


Ответы (2)


Сначала я исправил свое встроенное условие, написав : "" в конце каждого условия. (Спасибо Валерию Квону за это) затем и, наконец, я нашел решение своей проблемы с вложенностью с помощью метода .html_safe, я просто сохранил все в строке var, а затем вернул ее с помощью html_safe. Вот код:

def carousel_item(element, active=false )
    if !element.nil?
        content_tag(:div,class:"item"+(active ? " active" : "")) do 
            image_tag("carousel/"+element.name) + #important to concat with next part
            if !element.desc.nil? || !element.title.nil? || !element.link.nil?
                content_tag(:div,class:"container") do
                    content_tag(:div,class:"carousel-caption") do
                        c = ""
                        !element.title.nil? ?   c += content_tag(:h1,element.title) : ""
                        !element.desc.nil? ?    c += content_tag(:p,element.desc,class:"lead") : ""
                        !element.link.nil? ? c += link_to(element.linktitle,url_for(action: element.link),class:"btn btn-large btn-primary") : ""
                        c.html_safe #this is the key that solves eveything
                    end
                end
            else
                nil
            end
        end
    end
end

Вот несколько других примеров того, как это сделать html_safe и помощники в рельсах 3

person Andres Perez    schedule 13.12.2012

person    schedule
comment
Не является цепочкой, каждая секция независима друг от друга - person Andres Perez; 13.12.2012
comment
Во всяком случае, основной синтаксис: [условие]? [возврат, если правда] : [возврат, если ложь]. - person Valery Kvon; 13.12.2012
comment
да, я пришел из программирования на jave, и вторая часть не обязательна, в любом случае спасибо, что исправили одну из моих проблем :) - person Andres Perez; 13.12.2012