1

我正在尝试学习如何查询 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"

我可以使用以下 URL 调用此资源:

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

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

但是....我不知道该怎么做

a.) 正确编写路由条目?b.) 如果我在浏览器中测试 URL 会是什么样子?

我试图了解 rake 路线,但我一定遗漏了一些东西。

有人可以提供一个基本示例来说明该操作应该是什么样子吗?路由条目应该是什么样的,访问资源的 URL 是什么样的?

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

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

任何帮助表示赞赏。

4

2 回答 2

1

您不必通过路由传递所有内容GET- URL 也支持参数 - 这些是您通常在 URL 中的问号后看到的参数。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. BathroomsController您访问参数相同 - 但概念不同 - 您无需输入州并按城市查找浴室,您只需按州和城市查找浴室。

无论如何,您不想手动编写 URL - 您想要一个 Rails 助手或 HTML 表单生成它:

link_to "bathroom in Chicago, IL",:controller=>:bathrooms,:action=>:index,:state=>'IL',:city=>'Chicago'

如果要使用表单(让用户选择自己的州和城市),则需要将其方法设置为GET

form_tag {:controller=>:bathrooms,:action=>:index},:method=>:get do

并将statecity作为字段。

还值得注意的是,虽然您可以使用 SQLAND执行多个字段的搜索,但您也可以链接where方法:Bathroom.where(:state=>params[:state]).where(:city=>params[:city]).

于 2012-04-16T20:38:41.867 回答
0

您可以在查询字符串中放置任意参数。

例如:

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

您的查询如下所示:

@bathrooms = Bathroom.where("state = ? and city= ?" ,params[:state], params[:city])
于 2012-04-16T20:34:42.457 回答