:numberをパラメーターとして渡し、それをコントローラーの変数@test_suite_numに割り当てますbefore_filter
。
コントローラのnew
関数では、変数@test_suite_numを使用して、名前が付けられたテーブルをフィルタリングし、Test
IDが@test_suite_numと一致するエントリの数を取得します。このカウントを使用して、適切な数の子リソースを生成しますtest_run
。
私は同じことをしcreate
ますが、に依存するフォームでこれらの変数を使用するたびに、何らかの理由でnilエラーが発生します@test_suite_num
。createがパラメーターを受け取ることはないため、変数が初期化されることはないと想定しています。関数で@test_suite_numを使用するにはどうすればよいcreate
ですか?
コントローラーコード:
before_filter :get_number, :only => [:new, :create]
def get_number
@test_suite_num = params[:number]
end
新しい
def new
@test_suite_run = TestSuiteRun.new
@tests = Test.find(:all, :conditions => { :test_suite_id => @test_suite_num })
@tests.count.times do test_run = @test_suite_run.test_runs.build end
end
作成
def create
@test_suite_run = TestSuiteRun.new(params[:test_suite_run])
@tests = Test.find(:all, :conditions => { :test_suite_id => @test_suite_num })
@tests.count.times do test_run = @test_suite_run.test_runs.build(params[:test_suite_run]) end
if @test_suite_run.save
flash[:success] = "Run Added Succesfully"
redirect_to test_suite_runs_path(@test_suite_run)
else
render 'new'
end
end
編集:
RoRを使い始めたばかりなので、私のスタイルは本当に乱雑です。しかし、私の問題はまだ残っています。私の問題は、フォームで@testsを使用していることです。これは、渡したパラメーターで初期化されます。フォームは問題なく表示できますが、送信を押すと、次のようになります。
Showing /Users/vsp/Documents/rails_projects/web_db/app/views/test_suite_runs/_form.html.erb where line #13 raised:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Extracted source (around line #13):
10:
11: <%= f.fields_for :test_runs do |builder| %>
12:
13: Test <%= @tests[@i].id %><br><br>
14:
15: <%= render "partial", :f => builder %>
16: <hr>
明らかに、これは、作成コントローラーがparams [:number]を取得していないため、フォームの送信が中断することを意味します。作成機能に問題はありますか?
パラメータ:{"utf8" => "✓"、 "authenticity_token" => "/ vbOcFozTEAvoa03OUBfyxJbJ9AQp8m8yA04LkxlRE8 ="、 "test_suite_run" => {"test_runs_attributes" => {"0" => {"test_id" = "machine_id" => ""、 "date" => "2012-07-09 15:59:53 -0700"、 "status" => ""、 "result" => ""}、 "1" => {"test_id" => "3"、 "machine_id" => ""、 "date" => "2012-07-09 15:59:53 -0700"、 "status" => ""、 "result" = > ""}、 "2" => {"test_id" => "6"、 "machine_id" => ""、 "date" => "2012-07-09 15:59:53 -0700"、"ステータス"=>""、 "result" => ""}、 "3" => {"test_id" => "7"、 "machine_id" => ""、 "date" => "2012-07-09 15:59: 53 -0700 "、" status "=>" "、" result "=>" "}}、" date "=>" 2012-07-09 15:59:53 -0700"}、" commit "=>" Submit "、" action "=>" create "、" controller "=>" test_suite_runs "}"Submit"、 "action" => "create"、 "controller" => "test_suite_runs"}"Submit"、 "action" => "create"、 "controller" => "test_suite_runs"}
これを見ると、これは私のフォームのすべてのtext_inputフィールドです。