如何将用户输入从navbar(bootsrap)传递到我的控制器?

时间:2017-02-06 22:46:09

标签: ruby-on-rails twitter-bootstrap

我正在使用Yelp API。我有一个bootstrap导航栏,我希望用户在他们想要的Yelp结果对应的城市中写。但目前用户无法输入他们选择的城市,只有我作为程序员。这是我的控制器:

class SearchesController < ApplicationController

  def index

  end

  def search
    parameters = { term: params[:term], limit: 16 }
    render json: Yelp.client.search('London', parameters)
  end
end

如您所见,如果用户想要去伦敦,我必须在我的控制器中输入“London”。但我希望导航栏中的用户输入承担这一责任。

以下是我的_navbar.html.erb的代码:

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  <form class="navbar-form navbar-left">
    <div class="form-group">
      <input type="text" class="form-control" placeholder="Which city?">
    </div>
    <button type="submit" class="btn btn-default">Search</button>
  </form>
</div>

2 个答案:

答案 0 :(得分:0)

您的搜索表单应POST到控制器中的端点。您可以进行“搜索”操作并从URL中获取参数。默认情况下,您拥有的表单标记将尝试推送查询参数,这将是搜索词。

你很亲密。

答案 1 :(得分:0)

您的表单输入需要name属性才能发送数据,以便您可以在params哈希中接收它。

<input type="text" class="form-control" placeholder="Which city?" name="search">

表单需要知道去哪里

 <form action="/searches/search" class="navbar-form navbar-left">

当您立即发送表单时,您将在params哈希中将结果发送到控制器。

然后,您可以将渲染更新为

Yelp.client.search(parmas[:search], parameters)

Here是关于请求如何工作的非常好的教程。