0

所以我正在写一个助手来帮助我填写 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:语法错误,意外的keyword_end,期待':'

在关闭方法之前的最后一个结束之后指向.. 与这个东西斗争了几个小时,仍然找不到解决方案。

4

2 回答 2

0

...

!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"}) : nil ) : nil) : nil
于 2012-12-12T21:29:17.427 回答
0

: ""首先,我在每个条件的末尾修复了我的内联条件。(感谢 Valery Kvon)然后,最后我找到了使用 .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 和 rails 3 中的助手

于 2012-12-13T04:21:38.707 回答