2012-04-16 57 views
1

我在學習如何查詢rails數據庫並將結果作爲JSON返回。在我的例子中,我想使用參數,城市和州來查詢數據。Ruby on Rails:基本參數化查詢和URL形成

到目前爲止,在我的控制器中,我已經得到了以下操作。

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子句似乎很容易。

但....我不知道該怎麼

一)正確地寫入路由條目? b。)如果我在瀏覽器中測試它,URL會是什麼樣子?

我試着瞭解耙路線,但我必須錯過一些東西。

有人可以提供一個基本的例子,看看該動作應該是什麼樣子?路由條目應該是什麼樣的,訪問資源的URL是什麼樣的?

再說一遍,如果用SQL編寫,這就是我想要返回的東西。

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

任何幫助表示讚賞。

回答

1

您沒有通過的路線傳遞一切 - 網址還支持GET參數 - 這些是您通常在URL中的問號之後看到的參數。您可以添加這些GET參數而不更改您的路線:http://localhost:3000/bathrooms/state/IL.json?city=Chicago。然後您可以通過params[:city]訪問city參數。但在你的情況下,我認爲使用http://localhost:3000/bathrooms/index.json?state=IL&city=Chicago會更好。您還需要你的路由改變

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

,並把代碼中的BathroomsControllerindex方法。你訪問的參數是一樣的 - 但概念是不同的 - 你不進入一個州,並按城市尋找浴室,你只需按州和城市尋找浴室。

不管怎麼說,你不想手工編寫的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的領域。

同樣值得注意的是,雖然您可以使用SQL的AND執行多個字段的搜索,但您也可以鏈接where方法:Bathroom.where(:state=>params[:state]).where(:city=>params[:city])

+0

完美的例子。非常感謝你。 – 2012-04-16 20:57:21