Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用帮助程序澄清代码_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 使用帮助程序澄清代码

Ruby on rails 使用帮助程序澄清代码,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一张非常大的报名表,所以我只给你看一小部分 这是每个输入的逻辑,模式相同: 向字段出错的部分添加工具提示 添加一个CSS类,用于区分有无错误的字段 对于相同的通用机制,它会产生大量HTML/Ruby代码。我知道Rails在某些场景中提供了一些帮助来简化代码 我的问题可以通过助手解决吗?如果可以的话,你认为我应该如何处理呢? 谢谢,我想说你可能是在找一个部分而不是助手 我会制作一个名为eg:\u form\u field.html.erb的部分,内容如下: <div class=

我有一张非常大的报名表,所以我只给你看一小部分


这是每个输入的逻辑,模式相同:

  • 向字段出错的部分添加工具提示
  • 添加一个CSS类,用于区分有无错误的字段
对于相同的通用机制,它会产生大量HTML/Ruby代码。我知道Rails在某些场景中提供了一些帮助来简化代码

我的问题可以通过助手解决吗?如果可以的话,你认为我应该如何处理呢?


谢谢,

我想说你可能是在找一个
部分
而不是
助手

我会制作一个名为eg:
\u form\u 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标记。那是可选的。。。如果你想的话,你可以保持原样。但无论哪种方式,都要在传递
模型
字段
、和
标签
作为局部变量的地方做一个分部


以下是关于partials的rails文档:

我认为partials可能更干净,但您仍然可以使用助手,可能类似于以下内容:

助手

def my_text_field(errors, element)
  div_options = { class: "uk-inline uk-width-1-2" }
  input_class = "uk-input"

  if errors.any?
    div_options.merge(title: errors.first, "uk-tooltip": "pos: left")
    input_class << " uk-form-danger"
  end

  content_tag(:div, div_options) do
    content_tag(:span, class: "uk-form-icon", "uk-icon": "icon: user") do
      element.text_field :first_name, placeholder: "First name", class: input_class
    end
  end
end
def my_text_字段(错误,元素)
div_options={class:“uk内联uk-width-1-2”}
输入\ u class=“英国输入”
如果有错误,有吗?
div_options.merge(标题:errors.first,“英国工具提示”:“位置:左”)

输入类您正在验证模型中所需的字段?您应该会发现一些错误,这可能是最容易调整的。@RockwellRice不确定我的解释是否不清楚,但从代码角度来看没有问题。一切正常,错误消息显示正确。我唯一的问题是代码的可读性,我有在字段之间重复我自己的感觉。如何提高帮助程序的可读性?请注意,您可以使用字段数组快速调用它,例如:
,然后将调用行更改为
。当然,之后也会有
。谢谢,解决方案正在发挥作用。然而,我发现了另一种通过partials()传递变量的方法,在我看来效果更好。
def my_text_field(errors, element)
  div_options = { class: "uk-inline uk-width-1-2" }
  input_class = "uk-input"

  if errors.any?
    div_options.merge(title: errors.first, "uk-tooltip": "pos: left")
    input_class << " uk-form-danger"
  end

  content_tag(:div, div_options) do
    content_tag(:span, class: "uk-form-icon", "uk-icon": "icon: user") do
      element.text_field :first_name, placeholder: "First name", class: input_class
    end
  end
end
<div class="input-element uk-margin-small-bottom uk-flex">
  <%= my_text_field(@user.errors[:first_name], f) %>
</div>