1

RubyonRailsは初めてです。私は1対多の関係を作ろうとしています。私には「プロジェクト」があり、プロジェクトには多くの「タスクバンドル」が必要です。それは元気そうです。

ここで、選択したプロジェクトに対してフィルタリングされたタスクバンドルのみをページに表示したいと思います。

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 4のプロジェクトではなく、ID3のプロジェクトを検索しますか?チェックしたところ、ID4のプロジェクトが存在します。

出力

==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は引数として渡す必要があります。あなたのコードはルビーブロックを作成します。

于 2013-01-05T19:44:55.283 に答える
1

Project.find {params [:id]}の代わりに@project = Project.find_by {params [:id]}を使用する必要があると思います

idが存在しない場合、findメソッドは例外を発生させ、残りのコードの実行を停止します。find_byメソッドを使用する場合と同様に、idがデータベースに存在しない場合はnilを返します。

于 2014-06-02T18:56:04.223 に答える