Ruby on Rails:如何在控制器函数之间传递变量?

时间:2012-07-10 01:13:49

标签: ruby-on-rails

我需要使用create函数中新函数的params [:number],我该怎么做呢?

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来接受参数:number。

new_test_suite_run_path(:number => ts.id)

然后我用它来生成表单。我不明白在create function中要做什么。如果我删除控制器中的create函数,当我以new形式提交表单时,它会给出一个错误,指出控制器中没有创建操作。这是否意味着我必须将new中的所有内容移动到create函数中?如何才能实现,我是否必须创建一个create.html.erb并移动所有表单信息?

2 个答案:

答案 0 :(得分:4)

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

  

flash提供了一种在操作之间传递临时对象的方法。   你放在闪光灯中的任何东西都将暴露在下一个闪光灯中   行动然后清除。


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

答案 1 :(得分:2)

  

我想我很困惑,因为new和create之间存在差异。

让我们先解决这个问题。

new方法为Rails构建TestSuiteRun实例的表单生成视图。此实例仅存在内存暂时

create方法获取表单中输入的数据,并实际将创建的实例保存到数据库

我认为您不需要更改new方法。

尝试将create方法更改为此。

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