【问题标题】:Rails ignoring whitespace before <%= insertsRails 在 <%= 插入之前忽略空格
【发布时间】:2013-08-27 13:05:25
【问题描述】:

我喜欢我的视图源代码干净整洁,但任何时候我使用 标记时都会忽略该标记之前的空白。

.html.erb:

查看-来源:

请注意,Yield、crfs_meta 和样式表链接标签会忽略标签前的空格。我使用标准的 2 个空格作为我的“标签”。对于产量和渲染部分,我可以补偿删除的空白并将其放入部分中,但对于脚本和样式表标签我不能这样做。有没有办法让我保留我的空白???

我刚刚意识到布局和 yield 的渲染标签保留了前一行的空白(4 个选项卡,渲染在 6 个选项卡上),但是在该布局内,我必须将第一行放在 0 选项卡上,然后是下一行在 4 个选项卡处行,使其在 6 个选项卡处内联...

【问题讨论】:

  • Rails 4、Ruby 2.9.3、Aptana Studio 3 是我的 IDE
  • 您的图像很整洁,但如果代码以“stackoverflow 样式”作为实际文本块呈现,作为回答者会更容易。这样可以更轻松地将您的特定代码复制到答案中。它还鼓励您将问题代码提取到具体问题;)
  • 我可以理解 Shadwell 但堆栈溢出也会删除空白,我不会再进去重新格式化空白。
  • 嘿,是的,如果问题中的空格也被去掉了,那会令人困惑!
  • 如果您使用 Markdown 正确格式化代码,Stack Overflow 不会去除空格。只需将所有代码缩进四个空格,或选择代码并点击工具栏中的{} 按钮即可自动执行此操作。然后代码中的所有空格都将被保留,并且您的代码将突出显示语法。

标签: html ruby-on-rails erb


【解决方案1】:

问题不在于您的编辑建议的&lt;%=。这是因为您在 &lt;%= ... %&gt; 块中调用的方法正在生成更多的输出行,而这些后续行不尊重您的缩进。

据我所知,没有真正巧妙的方法可以解决它。您可以将这些方法的输出中的任何换行符替换为正确的缩进,但随后您需要牺牲代码中的可读性来换取输出中的可读性。

例如:

<%= csrf_meta_tags.gsub("\n", "\n    ").html_safe %>

或者您可以编写一个辅助方法(在 application_helper.rb 中)来做到这一点:

def indent_output(output, indentation = "  ")
  output.gsub("\n", "\n" + indentation).html_safe
end

然后你的相关视图代码是:

<%= indent_output(csrf_meta_tags, "    ") %>
<%= indent_output(stylesheet_link_tag("bootstrap.min", "main"), "    ") %>

【讨论】:

  • 我将如何做到这一点,所以这个助手需要一个缩进空格数的值?我的铁轨真的生锈了。
  • 哦,等一下,你刚刚在帮助程序中设置了一个默认值,我现在明白了!
  • 好的,所以我尝试了这个,并且 1. 需要将帮助程序称为 indent 或您提供的标签称为 indent_output,然后代码像这样 <meta content="authenticity_token"名称=“csrf参数”; /> <元内容="ATmNHGpQy3193K3KsxndHAc+gzGNoEGw5XmfXi8xKW4="名称=“csrf-token”; />
  • 抱歉,我忘了您需要在 gsub 的输出上调用 html_safe。我也修复了方法名称混淆。
  • 好吧,如果你能更新 ill hit accept,我稍微修改了一下。我仍然需要保留新行,所以我让它在新行中添加缩进 def indent(output, indentation = " ") output.gsub("\n", "\n"+indentation).html_safe end
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多