我正在尝试学习如何查询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'
任何帮助表示赞赏。
答案 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])