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