2012-07-10 70 views
1

我需要在創建函數中使用新函數中的params [:number],我該如何去做這件事?Ruby on Rails:如何在控制器功能之間傳遞變量?

def new 
    @test_suite_run = TestSuiteRun.new 

    @tests = Test.find(:all, :conditions => { :test_suite_id => params[:number] }) 
end 

def create   
    @test_suite_run = TestSuiteRun.new(params[:test_suite_run]) 

    @tests = Test.find(:all, :conditions => { :test_suite_id => //I need the same params[:number] here}) 
end 

編輯:我想我很困惑,因爲新和創建之間的差異然後。我將參數:數字傳遞給新的。

new_test_suite_run_path(:number => ts.id)

我,然後用它來生成表單。我不明白在創建函數中要做什麼。如果我刪除了控制器中的創建功能,當我以新的方式提交表單時,它給了我一個錯誤,指出控制器中沒有創建操作。這是否意味着我必須將所有內容都移動到創建函數中?這怎麼可能,我必須創建一個create.html.erb並移動我所有的表單信息?

+0

似乎違反直覺的同時擁有一個'new'和'create'功能:/好像你就需要在原有的'經過:number'參數成函數都來自同一個地方 – reagan 2012-07-10 01:16:24

+0

你使用新的和創建方法是非常規的。你能告訴我們你想完成什麼嗎?也許我們可以建議一種做你想做的事的方式,而不是採用非常規的方式。 – 2012-07-10 01:16:53

回答

4

可以使用Flash: http://api.rubyonrails.org/classes/ActionDispatch/Flash.html

閃光燈提供了一種方法來傳遞行動之間的臨時對象。 你放在閃光燈中的任何東西都會暴露在下一個 動作中,然後清除。


def new 
    @test_suite_run = TestSuiteRun.new 
    @tests = Test.find(:all, :conditions => { :test_suite_id => params[:number] }) 

    flash[:someval] = params[:number] 
end 

def create   
    @test_suite_run = TestSuiteRun.new(params[:test_suite_run]) 

    @tests = Test.find(:all, :conditions => { :test_suite_id => flash[:someval] }) 
end 
2

我想我很困惑,新的創造,然後之間的差異。

讓我們先來解決這個問題。

new方法爲Rails構建TestSuiteRun實例的表單生成視圖。這個實例僅存在內存臨時

create方法取表格中輸入的數據,實際上將創建的實例永久保存到數據庫

我不認爲你需要改變你的new方法。

嘗試將您的create方法更改爲此。

def create 
    @test_suite_run = TestSuiteRun.new(params[:test_suite_run]) 
    @test_suite_run.save 
end 
相關問題