2012-07-09 50 views
0

我傳入:number作爲參數,然後將其分配給控制器中的變量@test_suite_num before_filterRuby On Rails:使用創建控制器函數中新控制器函數的參數

在我的控制器中的new函數中,我使用變量@test_suite_num過濾名爲Test的表以獲取其ID與@test_suite_num相匹配的條目數。我使用此計數來生成適當數量的子資源test_run

我對create做了同樣的事情,但由於某些原因,只要我在依賴@test_suite_num的表單中使用這些變量,就會得到零錯誤。我假設由於創建永遠不會接受一個參數,變量永遠不會被初始化。我如何在create函數中使用@test_suite_num?

控制器代碼:

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 

編輯:

我只是用回報率,所以我的風格是非常的混亂開始。但是我的問題依然存在。我的問題是,在我的形式,我使用@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:{ 「UTF8」=> 「✓」, 「authenticity_token」=> 「/ vbOcFozTEAvoa03OUBfyxJbJ9AQp8m8yA04LkxlRE8 =」, 「test_suite_run」=> { 「test_runs_attributes」=> { 「0」=> {「爲test_id 「=>」1「,」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「,」status「=>」「,」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「}

通過此查看,它只是我窗體中的所有text_input字段。

+0

你可以做一個'把params.to_s'在頂部用創造行動?該視圖仍然失敗,但服務器將在服務器日誌中顯示參數 – varatis 2012-07-09 22:50:17

回答

0

你正在做的事情真的很奇怪。不要將@test_suite_num分配給一個實例變量,而是放入一個getter方法(這非常尷尬和奇怪),完全擺脫那個before_filter和方法。事實上,甚至不使用@test_suite_num,因爲它看起來並不像你正在使用它。

取而代之,只需使用params[:number]就像您用於您的previous question一樣。

如果這不起作用,請在您的創建操作中執行puts params.to_s,然後向我們展示當您提交表單時會發生的情況。

(另外,作爲註腳:查找哪些實例變量在Ruby中,因爲它看起來像你濫用它們。)

相關問題