使用以下代码获取此一元+错误,查看以前的解决方案,他们建议结束在某些条件下丢失,但它看起来并不像,如果是这种情况。
请帮忙
<% if part.children.exists? %>
<% @link_text += " <b>|</b> " %>
<% part.children.each do |part_child| %>
<% if part_child.display_type == "radio" || part_child.display_type == "dropdown" || part_child.display_type == "checkbox" %>
<% if part_child.display_type == "checkbox" %>
<% @checkbox_options = "" %>
<% part_child.options.each do |o| %>
<% if o.is_default? %>
<% @co = "<span id = 'nav_option_id_" + o.id +"'>" + o.name +"</span>" %>
<% @checkbox_options += @co %>
<% end %>
<% end %>
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" "</span>" %>
<% else %>
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" + part_child.options.detect{|o| o.is_default?}.try(:name).to_s + "</span>" + " <b>|</b> " %>
<% end %>
<% end %>
<% end %>
<% end %>
答案 0 :(得分:1)
我认为这一行是问题......
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" "</span>" %>
它错过了一个&#34; +&#34;在最后两个元素之间。
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" + "</span>" %>
正如BrioSatse在评论中所说,插值会更好。
答案 1 :(得分:0)
请你试试这个吗?
<% if part.children.exists? %>
<% @link_text += " <b>|</b> " %>
<% part.children.each do |part_child| %>
<% if %w(radio dropdown checkbox).include?(part_child.display_type) %>
<% if part_child.display_type.eql?("checkbox") %>
<% @checkbox_options = "" %>
<% part_child.options.each do |o| %>
<% if o.is_default? %>
<% @co = "<span id = 'nav_option_id_#{o.id}'>#{o.name}</span>" %>
<% @checkbox_options += @co %>
<% end %>
<% end %>
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_#{part_child.id.to_s}'></span>" %>
<% else %>
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_#{part_child.id.to_s}'>#{part_child.options.detect{|o| o.is_default?}.try(:name).to_s}</span>"+" <b>|</b> " %>
<% end %>
<% end %>
<% end %>
<% end %>
我瘦的问题在于:
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" "</span>" %>
最后</span>
附近的引号毫无意义。
我还重写了你的ERB输出,使其更具可读性,并且更短。我个人喜欢使用#{}表示法将字符串与变量合并在一起。
答案 2 :(得分:0)
这一行
<% @link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_" + part_child.id.to_s + "'>" "</span>" %>
在+
之前缺少</span>
。
这突出了使用字符串连接的问题 - 这是一个丑陋,令人困惑的混乱。这是一种更好(并且不间断)的方式来编写上述内容:
<% @link_text = += "<b>#{part_child.name}</b> : <span id='part_child_#{part_child.id.to_s}'></span>" %>
编辑:另外,如果您只是在视图中加载了一些ruby代码,并且实际上没有渲染任何东西,那么您可以将整个批量包装在一个erb选项卡中,使其更具可读性。例如
<%
if part.children.exists?
@link_text += " <b>|</b> "
part.children.each do |part_child|
if %w(radio dropdown checkbox).include?(part_child.display_type)
if part_child.display_type.eql?("checkbox")
@checkbox_options = ""
part_child.options.each do |o|
if o.is_default?
@co = "<span id = 'nav_option_id_#{o.id}'>#{o.name}</span>"
@checkbox_options += @co
end
end
@link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_#{part_child.id.to_s}'></span>"
else
@link_text = @link_text + "<b>#{part_child.name}</b> : <span id='part_child_#{part_child.id.to_s}'>#{part_child.options.detect{|o| o.is_default?}.try(:name).to_s}</span>"+" <b>|</b> "
end
end
end
end
%>
即使在这样做之后,您的代码仍然看起来像是一种大规模过于复杂的实现方式。构建像这样的大量html并不是一件好事。你应该单独渲染html块,逻辑缠绕在它们周围。