2013-01-05 187 views
1

我新的Ruby on Rails的。 我試圖做一個一對多的關聯。我有一個「項目」,項目應該有許多「Taskbundle」。 這看起來很好。Ruby on Rails找到 - 找到錯誤的對象?

現在我想顯示的頁面只針對過濾所選項目的taskbundles上。

我在ProjectController類所做的這樣:

def select 
    puts "==Projects==" 
    puts params[:id] 

    @project = Project.find{params[:id]} 
    puts @project.id 
    session[:project_id] = @project.id 

    puts session[:project_id] 

    redirect_to taskbundles_path 
end 

我越來越有沒有問題,但find方法找到與ID爲3,而不是id爲4的項目的項目?我檢查了,ID爲4的項目存在。

輸出

==Projects== 
4 
3 
3 


Started GET "/projects/select/4" for 127.0.0.1 at 2013-01-05 20:19:03 +0100 
Processing by ProjectsController#select as HTML 
    Parameters: {"id"=>"4"} 
    ?[1m?[35mProject Load (0.0ms)?[0m SELECT "projects".* FROM "projects" 
Redirected to http://localhost:3000/taskbundles 
Completed 302 Found in 3ms (ActiveRecord: 0.0ms) 

我不知道在哪裏我做了一個錯誤?

回答

5

我覺得你有一個語法問題:@project = Project.find{params[:id]}應該@project = Project.find(params[:id])。該ID需要作爲參數傳遞。你的代碼創建一個紅寶石塊。

+0

謝謝!我爲這個「問題」搜索了大約2個小時:) – user1951668

1

我認爲你應該使用 @project = {Project.find_by PARAMS [:ID]},而不是Project.find {PARAMS [:ID]}

如果ID不存在find方法會給你會異常並停止執行剩餘的代碼,就像你使用find_by方法一樣,如果數據庫中不存在id,它將返回nil。

相關問題