6

ユーザーが既存のレコードを検索して関連付けを設定できるフォームがあります。各「予約」は「顧客」に属します。フォームに顧客の名前を入力すると、自動的に検索が行われ、目的の顧客をクリックします。入力している入力フィールドには顧客の名前が表示されるはずですが、フォームが機能するようcustomer_idに、非表示の入力フィールドに を設定しました。

simple_form ジェムを使用しています。customer_id顧客の名前を表示するテキスト入力フィールドの横に検証エラーを表示できるかどうか知っている人はいますか? モデルにはcustomer_idが必要なので、ユーザーが空白のままにしておくことをユーザーに伝えるフォームが必要です。

コードの表示 (簡略化 -- 顧客のテキスト ボックスに入力すると検索を処理し、選択を行うと非表示フィールドの値を顧客の ID に設定する JavaScript がいくつかあります):

<%= 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

私は最終的appendに simple_form のブロックについて知りました (プルリクエストに埋もれており、他のどこにも文書化されていません)。基本的に、それを使用して、必要なマークアップを .xml に追加できますf.input。私は次のことを行いました。これはかなりハックですが、必要なことは実行します。

<%= 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 に答える