Rails - 渲染命令在标签后打破行

时间:2017-05-25 12:26:59

标签: ruby-on-rails

我正在关注官方rails tutorial

我的article_controller中有render 'new'命令。如果我提供无效输入(太短),则会重新呈现新的文章页面。 但是,现在保存无效值,渲染会在标题文本字段之前添加换行符。

Before After

<h1>New Article</h1>

<%= form_for :article, url: articles_path do |f| %>
  <p>
    <%= f.label :title %> <-NO BREAK HERE!
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :text %><br>
    <%= f.text_area :text %>
  </p>

  <p>
    <%= f.submit %>
  </p>
<% end %>

<%= link_to 'Back', articles_path %>

正如您所看到的,我故意在标题标签后面省略了第一个<br>标签以查看差异。

这背后的故事是什么?

1 个答案:

答案 0 :(得分:1)

这是因为Rails包含div中的无效字段。普通字段如:

<label for="foo">Email: </label>
<input type="bar" value="fubar" name="baz[bar]" id="baz_bar">

当这些字段具有无效值时,默认情况下将包含在div class =“field_with_errors”中

<div class="field_with_errors">
  <label for="foo">Email: </label>
</div> 
<div class="field_with_errors">
  <input type="bar" value="fubar" name="baz[bar]" id="baz_bar">
</div>

div的样式(或不样式)会影响它的显示方式。可能默认情况下,div会尝试一个在另一个之下,这就是你在那里获得换行的原因。

您可以在此处阅读更多内容,了解如何覆盖此行为 https://rubyplus.com/articles/3401-Customize-Field-Error-in-Rails-5