2012-07-10 47 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 
相关问题