rails 4:使用自定义路线创建自定义搜索表单

时间:2016-06-01 02:19:01

标签: ruby-on-rails ruby ruby-on-rails-4 routing

我认为这应该是一个简单的问题,但我现在无法理解。整天编码,需要另一套眼睛。

正在显示当前网址:

http://localhost:3000/q?utf8=✓&query%5Bquery%5D=testing

而不是

http://localhost:3000/q?query=testing

的routes.rb

Rails.application.routes.draw do

  resources :biz do
    member do
      get 'photo'
    end
  end
  get '/q' => 'search#index', as: :search


  root 'welcome#index'

end

欢迎/ index.haml

= simple_form_for :query, url: search_path, method: "get" do |q|
  = q.input :query

我有一个 search_controller.rb

class SearchController < ApplicationController
  def index
    if params.has_key?(:query)
      @query = Model.q(params[:query])
    else
      redirect_to root_path
    end
  end
end

我需要修理或添加什么?

来自检查员的表格

<form novalidate="novalidate" class="simple_form /q" action="/q" accept-charset="UTF-8" method="get">
  <input name="utf8" type="hidden" value="✓">        
  <div class="form-group string required query_query">
    <label class="string required control-label" for="query_query">
      <abbr title="required"></abbr> Query
    </label>
  <input class="string required form-control" type="text" name="query[query]" id="query_query">      
  </div>           
</form>

1 个答案:

答案 0 :(得分:2)

删除/:查询,将其作为查询参数发送,而不是路径参数。 把它/q

也可能必须是

= simple_form_for :search, url: search_path do |q|

表单将提交http://example.com/q?query=this而不是http://example.com/q/this/

网址问题,

问题是简单的形式是将它包装在模型中。所以你的参数将是params[:query][:query]输入。您可以text_field_tag 'query'代替q.input :query