2013-03-19 64 views
2

我建立了一個Rails REST服務,並且遇到顯示單條記錄的問題。這裏是我試圖打的網址:Rails Rest服務GET

http://website:3000/users/2/timesheets/21 

控制器代碼:

def show 
    puts "SHOW" 
    puts params.inspect 
    @timesheets = User.find(params[:user_id]).timesheets(params[:id]) 

    respond_to do |format| 
     format.json { render json: @timesheets } 
    end 
    end 

我知道PARAMS越來越控制器,但沒有使用:timesheet_id。這裏是控制檯輸出顯示我的意思:

Started GET "https://stackoverflow.com/users/2/timesheets/21" for **.**.***.** at 2013-03-19 06:12:11 -0400 
Processing by TimesheetsController#show as */* 
    Parameters: {"user_id"=>"2", "id"=>"21"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "2"]] 
    Timesheet Load (0.5ms) SELECT "timesheets".* FROM "timesheets" WHERE "timesheets"."user_id" = 2 
Completed 200 OK in 120ms (Views: 36.5ms | ActiveRecord: 2.9ms) 

我在參數散列中看到時間表ID 21。然後進行查詢以獲取用戶,但隨後抓取該用戶的所有時間表。任何幫助,將不勝感激。謝謝。

回答

1

嘗試這種情況:

@user = User.find(params[:user_id]) 
@timesheet = @user.timesheets.find(params[:id]) 

這如下應該運行的查詢:

SELECT "timesheets".* FROM "timesheets" WHERE "timesheets"."id" = 21 AND ("timesheets"."user_id" = 2) LIMIT 1 

的相應的視圖應該是指@timesheet變量和不@timesheets

+1

這個工作很完美。我可以在一行中完成:'User.find(params [:user_id]).timesheets.find(params [:id])''。謝謝您的幫助。 – jhamm 2013-03-19 14:06:13

4

普拉卡什建議的工作,但執行兩個查詢:一個獲取用戶,一個獲取時間表。似乎沒有任何理由首先做User.find(...)。不妨只查詢時間表表格,它只執行一個查詢,因此速度更快:

@timesheet = Timesheet.where('user_id = ? and id = ?', params[:user_id], params[:id]).first