我正在关注官方rails tutorial。
我的article_controller中有render 'new'
命令。如果我提供无效输入(太短),则会重新呈现新的文章页面。
但是,现在保存无效值,渲染会在标题文本字段之前添加换行符。
<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>
标签以查看差异。
这背后的故事是什么?
答案 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