语法错误,意外的一元+,期待keyword_end

时间:2015-03-12 11:26:41

标签: ruby-on-rails

使用以下代码获取此一元+错误,查看以前的解决方案,他们建议结束在某些条件下丢失,但它看起来并不像,如果是这种情况。

请帮忙

<% 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 %>

3 个答案:

答案 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块,逻辑缠绕在它们周围。