如果有多个输入(text_field_tag,select_tag等),submit_tag如何知道要提交什么信息?

时间:2018-10-23 14:19:34

标签: ruby-on-rails ruby drop-down-menu textfield search-form

我最近正在开发一个演示Web应用程序,以尝试了解有关Rails上的红宝石的更多信息,并且我试图建立一个搜索页面,用户可以同时按两个属性进行搜索-按课程名称和主题搜索课程ID。我已经处理了数据库后端的关联,经过几个小时的反复试验,我得到了一个有效的搜索表格。 但是,我想了解它的工作方式和原因,以及末尾的commit_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 :(得分:0)

<input>中的所有<form>标签都将在您提交表单时提交。 Rails在幕后要做的唯一事情就是为您的表单生成HTML,因此快速阅读一下可能会澄清一些有关HTML表单的内容:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms

您的表格完全有效。您可能会考虑向控制器添加一些逻辑,以根据提供的参数进行搜索。

答案 1 :(得分:0)

提交表单时,Rails会将其解释为称为params的键值哈希。就您而言,它将提交(及其对应的值):

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

然后,在控制器中,由您决定如何处理它们提供的参数。也许用search_field返回对象列表,或者在数据库中创建或更新对象。 Submit_tag按钮的作用与表单提交相同;请记住,这些表单助手只是以更简单的方式输出HTML的方法,以使Rails能够理解。

有关表格here的更多信息。