嵌套标记辅助方法上的SyntaxError

时间:2012-12-12 18:06:14

标签: ruby-on-rails ruby-on-rails-3 view-helpers

所以我正在写一个帮手来帮我填写Rails的bootstrap旋转木马。这是辅助方法的一段代码:

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,期待':'

指向最后一个结束之前关闭方法..小时打击这个东西,仍然找不到解决方案。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 and helpers in rails 3

相关问题