Rails erb格式化麻烦,幻像空间

时间:2012-10-11 01:50:24

标签: ruby-on-rails ruby-on-rails-3 erb

HALP!我的模板格式奇怪,我无法理解如何/为什么。

<% @poll.questions_all.each do |q| %>
          <td>
            <span class="optionvalue">
              <% if can? :read_full, @poll %>
                <%= resp[:texts][q.id] %>
              <% else %>
                <%= resp[:texts][q.id].nil? ? '' : resp[:texts][q.id].gsub(Question::POISON_WORDS_REGEX, '---') %>
              <% end %>
            </span>
            <% unless q.options.empty? %>
              <%= q.get_matching_option(resp[:texts][q.id])? ": #{q.get_matching_option(resp[:texts][q.id])}" : '' %>
            <% end %>
          </td>
        <% end %>

结果如下:

A : Playgrounds

不知道第一个空间在哪里形成,并且每一次摆脱它的努力都失败了!生成的标记:

<td>
   <span class="optionvalue">
       A
   </span>
       : Playgrounds
</td>

3 个答案:

答案 0 :(得分:1)

尝试使用<%- -%>版本的erb标记,这些应该可以抑制额外的空格:

<%- if can? :read_full, @poll -%>
  <%= resp[:texts][q.id] %>
<%- else -%>
  <%= resp[:texts][q.id].nil? ? '' : resp[:texts][q.id].gsub(Question::POISON_WORDS_REGEX, '---') %>
<%- end -%>

我不记得你是否在开始和结束标签中都需要它们,但是我建议你玩它并看看你能不能得到你想要的东西。

答案 1 :(得分:0)

可怕的解决方案,但它确实有效:

            <% @poll.questions_all.each do |q| %>
          <td>
            <span class="optionvalue">
              <% if can? :read_full, @poll %>
                <%= resp[:texts][q.id] %></span><%= q.get_matching_option(resp[:texts][q.id])? ": #{q.get_matching_option(resp[:texts][q.id])}" : '' unless q.options.empty? %>
              <% else %>
                <%= resp[:texts][q.id].nil? ? '' : resp[:texts][q.id].gsub(Question::POISON_WORDS_REGEX, '---') %></span><%= q.get_matching_option(resp[:texts][q.id])? ": #{q.get_matching_option(resp[:texts][q.id])}" : '' unless q.options.empty? %>
              <% end %>
          </td>
        <% end %>

答案 2 :(得分:0)

如果您将所有内容保存在一行HTML上,我非常确定erb会做正确的事情(不添加不需要的行)。

对于这种情况,一般情况下,我建议您在视图助手文件中的方法中放置任何用于生成内容的逻辑(或者如果您感觉很懒,则在erb的代码块中,如本示例中所示) ):

<% @poll.questions_all.each do |q| %>
  <% 
    if can? :read_full, @poll
      texts = resp[:texts][q.id]
    else
      texts = (resp[:texts][q.id].nil? ? '' : resp[:texts][q.id].gsub(Question::POISON_WORDS_REGEX, '---'))
    end
    if q.options.empty?
      matching_options = ''
    else 
      matching_options = (q.get_matching_option(resp[:texts][q.id])? ": #{q.get_matching_option(resp[:texts][q.id])}" : '')
    end
  %> 
  <td>
    <span class="optionvalue"><%= texts %></span><%= matching_options %>
  </td>
<% end %>