6

我有一个表单,允许用户搜索现有记录以填充关联。每个“预订”都属于一个“客户”。因此,该表单允许您输入客户的姓名,它会自动进行搜索,然后您单击所需的客户。您正在输入的输入字段应显示客户的姓名,但为了使表单正常工作,我将其设置customer_id在隐藏的输入字段中。

我正在使用 simple_form gem。有人知道我是否可以在customer_id显示客户姓名的文本输入字段旁边显示验证错误吗?模型中customer_id是必需的,所以我需要表单来告诉用户如果他们将其留空。

查看代码(简化——当您在客户文本框中键入内容时,有一些 JavaScript 会处理搜索,并在您进行选择时将隐藏字段中的值设置为客户的 id):

<%= simple_form_for @booking do |f| %>
  <%= f.hidden_field :customer_id, id: "customer_id" %>
  <%= f.input :customer, required: true,
      input_html: { value: @booking.customer_name } %>
<% end %>
4

1 回答 1

17

我最终发现了appendsimple_form 中的块(隐藏在拉取请求中,没有记录在我能找到的其他任何地方)。基本上,您可以使用它将任何您想要的标记附加到f.input. 我做了以下,这很hacky,但它做了我需要它做的事情:

<%= f.input :customer, required: true,
    wrapper_html: { class: ("error" if @booking.errors[:customer_id].any?) } do %>
  <%= f.input_field :customer, value: @booking.customer_name %>
  <%= f.error :customer_id %>
<% end %>

首先,如果相关字段有任何错误,我必须有条件地将类“错误”添加到包装器中,然后我使用该append块来渲染输入字段,然后是模型中相关字段的错误。希望这对将来的人有所帮助!

于 2013-11-03T17:42:37.540 回答