所以我正在写一个帮手来帮我填写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,期待':'
指向最后一个结束之前关闭方法..小时打击这个东西,仍然找不到解决方案。
答案 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