Ruby on Rails:基本的参数化查询和URL形成

时间:2012-04-16 19:58:52

标签: sql ruby-on-rails json url-routing parameterized-query

我正在尝试学习如何查询rails数据库并将结果作为JSON返回。在我的示例中,我想使用参数,城市和州来查询数据。

到目前为止,在我的控制器中,我已经采取了以下行动。

  def state
    @bathrooms = Bathroom.where("state = ?" ,params[:state])
    respond_to do |format|
      format.json  { render :json => @bathrooms }
      format.js   { render :nothing => true } 

    end
  end

这也是我的路由条目。

  match '/bathrooms/state/:state',
              :controller => "bathrooms",
              :action => "state"

我可以使用以下网址调用此资源:

http://localhost:3000/bathrooms/state/CA.json

这一切都很好,但我不知道如何通过多个参数进行查询。控制器中的添加和AND子句似乎很容易。

但......我不知道如何

a。)正确写入路由条目? b。)如果我在浏览器中测试它,URL会是什么样的?

我试过了解rake路线但我必须遗漏一些东西。

有人可以提供行动应该是什么样子的基本示例吗?路由条目应该是什么样的,访问资源的URL是什么样的?

同样,如果用SQL编写,这就是我想要返回的内容。

SELECT * from bathrooms WHERE city='Chicago' AND state = 'IL'

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您不必通过路径传递所有 - 该网址也支持GET参数 - 这些是您在网址中的问号后通常会看到的参数。您可以在不更改路线的情况下添加GET参数:http://localhost:3000/bathrooms/state/IL.json?city=Chicago。然后,您可以通过city访问params[:city]参数。但在你的情况下,我认为使用http://localhost:3000/bathrooms/index.json?state=IL&city=Chicago会更好。您还需要将路由更改为

match '/bathrooms/index',
    :controller=>:bathrooms,
    :action=>:index

并将代码放在index的{​​{1}}方法中。您可以访问相同的参数 - 但概念是不同的 - 您不进入州并按城市寻找浴室,您只需按州和城市寻找浴室。

无论如何,您不想手动编写URL - 您希望Rails帮助程序或HTML表单生成它:

BathroomsController

如果您想使用表单(让用户选择自己的州和城市),您需要将其方法设置为link_to "bathroom in Chicago, IL",:controller=>:bathrooms,:action=>:index,:state=>'IL',:city=>'Chicago'

GET

并将form_tag {:controller=>:bathrooms,:action=>:index},:method=>:get do state作为字段。

值得注意的是,虽然您可以使用SQL的city来执行多个字段的搜索,但您也可以链接AND方法:where

答案 1 :(得分:0)

您可以在查询字符串中添加任意参数。

例如:

http://localhost:3000/bathrooms/state/CA.json?city=Chicago

您的查询如下所示:

@bathrooms = Bathroom.where("state = ? and city= ?" ,params[:state], params[:city])