ruby-on-rails - 使用助手来澄清代码

标签 ruby-on-rails ruby

我有这个很大的注册表单,所以我只给你看一个“小”部分。

<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 标记。这是可选的……如果你愿意,你可以保持原样。但无论哪种方式,在将 modelfieldlabel 作为局部变量传递的地方创建一个局部变量。

这里是 rails doco on partials:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

关于ruby-on-rails - 使用助手来澄清代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45765624/

相关文章:

ruby-on-rails - 在具有与同一个 STI 表的 has_many 关系的查询中重用范围

ruby-on-rails - 在检查机器人的函数中使用中断时,Ruby 函数返回 true 而不是 false

java - 将提交的代码与以前提交的代码进行比较?

mysql - 如何从旧的(非 ruby​​)应用程序获取数据到新的(ruby)应用程序?

ruby - RDiscount :generate_toc with Sinatra

ruby - Ruby 中的多线程编程

ruby-on-rails - Instagram gem : getting photos with specific hashtags

ruby-on-rails - 从 routes.rb 重定向一批 url

ruby - 为什么哈希值不存在时不抛异常?

ruby-on-rails - Intellij Idea 或 RubyMine 中的 GLOBAL 与普通 Ruby SDK