2013-01-05 183 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。

相关问题