HTTP方法如何在form_tag帮助器中工作?

时间:2013-12-03 03:14:25

标签: ruby-on-rails ruby-on-rails-3 methods

我尝试设置一个表单,我希望它转移到成员#index。 但是使用代码①,我失败了,表单移到了成员#show。

☆code①

<%= form_tag :action => 'index' do %>
 <div class = "field">
  <%= label_tag 'place', '活動場所:' %><br />
  <%= text_field_tag 'place' %>
 </div> 
 <%= submit_tag '検索' %>
<% end %>

我得到了一些建议并修复了代码②。 我有个问题。为什么我必须将方法从“post”更改为“get”?

☆code2产生

   <div class= "form_index">
      <%= form_tag({:action=>"index"}, {:method=>"get"}) do %>
       <div class="from_field_index">
        <%= label_tag 'place', '場所:' %>
        <%= text_field_tag 'place' %>
       </div>
       <div class="search_button">
       <%= submit_tag '検索' %>
      <% end %>
      </div>
    </div>

☆members_controller

  def index
      if params[:place].present?
       @members = Member.where("place like ?" , "%" + params[:place] + "%")
      else
       @members = Member.all 
      end

       respond_to do |format|
       format.html # index.html.erb
       format.json
      end 
   end

1 个答案:

答案 0 :(得分:1)

GET意味着从服务器检索内容。 POST意味着向服务器添加内容。

搜索将从服务器获得一些结果,因此传统方法是在此操作上使用GET。搜索表单是使用GET的表单的完美示例。

此外,您的控制器操作index会响应&#39; GET&#39; only,由默认资源路由定义。它还需要您的客户端发送的请求“GET&#39;。

在搜索中使用GET的另一个好处是,params将在url中,因此url是可收藏的,可共享的和历史可以记录的。想想Google,只需复制链接即可共享搜索结果。