Как submit_tag знает, какую информацию отправлять в случае нескольких входов (text_field_tag, select_tag и т. Д.)? - PullRequest
0 голосов
/ 23 октября 2018

Недавно я работал над демонстрационным веб-приложением, чтобы попытаться узнать больше о ruby ​​на рельсах, и я пытался создать страницу поиска, где пользователи могли бы выполнять поиск по двум атрибутам одновременно - поиск курсов по названию курса и темеЯ бы.Я уже имел дело с ассоциациями на сервере для базы данных и получил рабочую форму поиска после проб и ошибок в течение нескольких часов.Тем не менее, я хочу понять, как и почему это работает, а также то, как конкретно submit_tag в конце знает, какой вход для отправки.

<div class = "row", id = "search_filter">
    <div class = "col-md-6">
        <%= form_tag("/courses", method: "get") do %>
            <%= label_tag :search_field, "Search by course name:" %>
            <%= text_field_tag :search_field, params[:search_field] %>            
    </div>
    <div class = "col-md-6">
        <%= label_tag :search_dropdown, "Search by subject:" %>
        <%= select_tag :search_dropdown, options_from_collection_for_select(Subject.all, "id", "name", params[:search_field]) %>   
    </div>
    <%= submit_tag 'Search', class: "btn btn-md btn-primary", name: nil %>

    <% end %>
</div>

Макет выглядит немного странно, потому что я хотел text_field и выпадающее менюбыть рядом и кнопка поиска под ними.Это хорошая реализация для формы или есть лучший способ сделать это (например, используя form_for).Многое из этого было построено с помощью советов из разных мест в Интернете, поэтому я не знаю, нужно ли все, что я включил.Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Когда вы отправляете форму, Rails интерпретирует ее как хэш значений ключа, называемый params.В вашем случае он отправит (с соответствующими значениями):

params: {
"search_field" => "",
"search_dropdown" => ""
}

, а затем в контроллере вам решать, что делать с параметрами, которые они дают.возможно, вернуть список объектов с search_field или создать или обновить объект в БД.Кнопка submit_tag делает то же самое, что и форма submit;имейте в виду, что эти помощники форм - это просто методы для вывода HTML более простым для понимания Rails способом.

дополнительная информация о формах здесь .

0 голосов
/ 23 октября 2018

Все теги <input> внутри вашего <form> будут отправлены при отправке формы.Единственное, что Rails делает за кулисами, - это генерирует HTML для вашей формы, так что быстрое прочтение этого может прояснить несколько моментов о формах HTML: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms

Ваша форма совершенно правильна.Вы можете рассмотреть возможность добавления некоторой логики в ваш контроллер, который выполняет поиск по предоставленным параметрам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...