web-dev-qa-db-ja.com

form_with検索フィールドRails 5.1

In Rails 5.1すべてのフォームはform_withで実行する必要があります。In http://edgeguides.rubyonrails.org/5_1_release_notes.html#unification-of-form -for-and-form-tag-into-form-with モデルに関連するフォームの例しか見つかりません。

このRails 5.0フォームをRails 5.1 with form_withで実行する正しい方法は何ですか?

<%= form_tag("/search", method: "get") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>
8
wintermeyer

これがform_with呼び出しです。これは、質問からのform_tag呼び出しとまったく同じです。

<%= form_with url: '/search', method: :get, local: true do |f| %>
  <%= f.label :q, "Search for:" %>
  <%= f.text_field :q, id: :q %>
  <%= f.submit "Search" %>
<% end %>

form_withはデフォルトでXHR(別名remote: true)を介して送信され、local: trueのデフォルトのform_tagのように動作させるにはremote: falseを追加する必要があることに注意してください。

詳細については、 RailsガイドAPIドキュメント および このgithubの問題に関するディスカッション を参照してください。

15
TeWu

form_withRails 5.1の機能を更新し、Rails form_forまたはform_withとして使用できるフォームを作成するための統一された方法特定のオプション

:url-フォームが送信するURL。 url_forまたはlink_toに渡される値に似ています。たとえば、名前付きルートを直接使用できます。 :scopeが:urlなしで渡されると、フォームは現在のURLに送信するだけです。

:method-フォームを送信するときに使用するメソッド。通常は「get」または「post」のいずれかです。 「patch」、「put」、「delete」、または別の動詞が使用されている場合、_methodという名前の非表示の入力が追加され、動詞のオーバーポストをシミュレートします。

:format-フォームが送信するルートのフォーマット。 :jsonなどの別のリソースタイプに送信する場合に便利です。 :urlが渡された場合はスキップされます。

:scope-入力フィールド名にプレフィックスを付けるスコープ。これにより、送信されたパラメーターがコントローラーでどのようにグループ化されるか。

:model-:urlと:scopeを推測し、入力フィールドの値を入力するモデルオブジェクト。したがって、title属性が「Ahoy!」に設定されている場合その場合、タイトル入力フィールドの値は「Ahoy!」になります。モデルが新しいレコードの場合は作成フォームが生成されますが、既存のレコードの場合は更新フォームが生成されます。 :scopeまたは:urlを渡して、デフォルトをオーバーライドします。例えば。 params [:post]をparams [:article]に変換します。

:authenticity_token-フォームで使用する認証トークン。カスタム認証トークンでオーバーライドするか、falseを渡して、認証トークンフィールドを完全にスキップします。有効なフィールドを制限する可能性のある支払いゲートウェイなどの外部リソースに送信する場合に便利です。リモートフォームは、config.action_view.embed_authenticity_token_in_remote_forms = falseを設定することにより、埋め込まれた認証トークンを省略できます。これは、フォームをフラグメントキャッシュするときに役立ちます。リモートフォームはメタタグから認証トークンを取得するため、JavaScriptを使用しないブラウザをサポートしていない限り、埋め込みは不要です。

:local-デフォルトでは、フォームの送信はリモートで目立たないXHRです。 local:trueでリモート送信を無効にします。

:skip_enforcing_utf8-デフォルトでは、utf8という名前の非表示フィールドが出力され、UTF-8送信を強制します。フィールドをスキップするには、trueに設定します。

:builder-フォームの作成に使用されたオブジェクトをオーバーライドします。

:id-オプションのHTMLid属性。

:class-オプションのHTMLクラス属性。

:data-オプションのHTMLデータ属性。

:html-フォームタグの他のオプションのHTML属性。

<%= form_with(model: @post, url: super_posts_path) %>
<%= form_with(model: @post, scope: :article) %>
<%= form_with(model: @post, format: :json) %>
<%= form_with(model: @post, authenticity_token: false) %>

form_withの名前空間付きルートの例

Admin_post_urlのような名前空間付きルートの場合:

<%= form_with(model: [ :admin, @post ]) do |form| %>
  ...
<% end %>

関連するリソースと

たとえば、リソースに関連付けが定義されている場合、ルートが正しく設定されていれば、ドキュメントにコメントを追加できます。

<%= form_with(model: [ @document, Comment.new ]) do |form| %>
  ...
<% end %> 

詳細についてはチェックアウト doc

5
uzaif

次のようにform_withを使用できます。

<%= form_with(url: '/search') do |f| %>
  <%= f.label(:q, "Search for:") %>
  <%= f.text_field(:q, id: :q) %>
  <%= f.submit("Search") %>
<% end %>
1
Ilya Lavrov