我最近正在开发一个演示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)。它的很多是通过从不同地方在线获取一些建议而构建的,因此我不知道我所包含的所有内容是否必要。谢谢!
答案 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的更多信息。