1

我是 Ruby on Rails 的新手。我正在尝试建立一对多的关联。我有一个“项目”,该项目应该有很多“任务包”。那看起来不错。

现在我想在页面上只显示为该选定项目过滤的任务包。

我在 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)

我不知道我在哪里做错了?

4

2 回答 2

5

我认为你有一个语法问题:@project = Project.find{params[:id]}应该是@project = Project.find(params[:id]). ID 需要作为参数传递。您的代码创建了一个 ruby​​ 块。

于 2013-01-05T19:44:55.283 回答
1

我认为你应该使用 @project = Project.find_by{params[:id]} 而不是 Project.find{params[:id]}

如果 id 不存在 find 方法会给你异常并停止执行剩余的代码,就像你使用 find_by 方法一样,如果 id 在数据库中不存在,它将返回 nil 。

于 2014-06-02T18:56:04.223 回答