Почему отправка работает с form_tag, а не с form_for? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть форма form_tag, связанная с гемом pg_search, который работает с form_tag, как показано ниже, без ajax на данный момент в чистом html, но когда я пытаюсь заставить его работать так же, как с form_, отправка не проходит. Ты знаешь почему? Попутно вы знаете эквивалент в form_tag помощника "url: search_path", который комментируется в form_for? Спасибо

1. Le form_tag

<%= form_tag new_product_association_path, method: :get do %>
  <%= text_field_tag :query, params[:query], id: "text_field", class: "form-control", placeholder: "Find a product" %>
  <%= submit_tag "Search", class: "btn btn-primary", id: "submit-search"%>
<% end %>


2. le form_for

<%= form_for product_associations_url, as: :get do |f| %>
  <%= f.text_field params[:query], id: "text_field" %>
  <%= f.submit "Search", class: "btn btn-primary", id: "submit-search" %>
<% end %>

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Возможно, проблема в том, что помощник form_for ожидает запись в качестве первого аргумента, а не URL-адрес. Я предлагаю переключиться на form_with, что также позволяет использовать URL.

Кроме того, использование text_field также недопустимо. Вы все равно должны указать имя (:query) поля ввода.

<%= form_with url: product_associations_url, as: :get do |f| %>
  <%= f.text_field :query, value: params[:query], id: "text_field" %>
  ...
<% end %>

Пример использования также можно найти по всему Справочнику по форме представления действий * .

0 голосов
/ 04 октября 2019

Rails предоставляет несколько способов создания HTML для формы.

  1. form_tag: генерирует HTML в наиболее сырой форме. Вы указываете различные атрибуты, и результирующая форма генерируется без магии Rails.

  2. form_for: Это способ Rails создавать формы, связанные с ресурсом, например, продуктом. Вы должны передать объект, который вы хотите создать / обновить. Итак, то, как вы пишете form_for, неверно. Еще одна проблема (опечатка) - вместо использования as для указания метода, вы должны использовать method.

Базовое использование form_for:

InКонтроллер:

@product = Product.new

В просмотрах:

<%= form_for @product do |f| %>
  ...
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...