我有这个很大的注册表单,所以我只给你看一个“小”部分。
<div class="input-element uk-margin-small-bottom uk-flex">
<% if @user.errors[:first_name].any? %>
<div class="uk-inline uk-width-1-2" title="<%= @user.errors[:first_name].first %>" uk-tooltip="pos: left">
<span class="uk-form-icon" uk-icon="icon: user"></span>
<%= f.text_field :first_name, placeholder: "First name", class: "uk-input uk-form-danger" %>
</div>
<% else %>
<div class="uk-inline uk-width-1-2">
<span class="uk-form-icon" uk-icon="icon: user"></span>
<%= f.text_field :first_name, placeholder: "First name", class: "uk-input" %>
</div>
<% end %>
</div>
这是每个输入的逻辑,架构是相同的:
- 在字段有错误的部分添加工具提示
- 添加一个 CSS 类来区分有无错误的字段
它会导致为相同的通用机制编写大量的 HTML/Ruby 代码。我知道 Rails 提供了一些帮助程序来简化某些场景中的代码。
我的问题可以通过助手解决吗?如果可以,您认为我应该如何处理?
谢谢,
最佳答案
我会说你可能在寻找 partial
而不是 helper
。
我会创建一个名为 eg: _form_field.html.erb
的部分,内容如下:
<div class="input-element uk-margin-small-bottom uk-flex">
<%
if model.errors[:field].any?
title = model.errors[:field].first
tooltip = 'pos: left'
input_extra_class = 'uk-form-danger'
else
title = ''
tooltip = ''
input_extra_class = ''
end
%>
<div class="uk-inline uk-width-1-2" title="<%= title %>" uk-tooltip="<%= tooltip %>">
<span class="uk-form-icon" uk-icon="icon: user"></span>
<%= f.text_field :field, placeholder: label, class: "uk-input <%= input_extra_class %>" %>
</div>
</div>
然后这样调用它:
<%= render 'form_field', model: @users, field: :first_name, label: 'First name' %>
请注意,在部分代码中,我将确实会发生变化的位提取到 if 语句中,以避免复制不会发生变化的 html 标记。这是可选的……如果你愿意,你可以保持原样。但无论哪种方式,在将 model
、field
和 label
作为局部变量传递的地方创建一个局部变量。
这里是 rails doco on partials:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials
关于ruby-on-rails - 使用助手来澄清代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45765624/