Ruby on rails RubyonRails:在createcontroller函数中使用新控制器函数中的参数

Ruby on rails RubyonRails:在createcontroller函数中使用新控制器函数中的参数,ruby-on-rails,Ruby On Rails,我传入:number作为参数,然后将其分配给控制器中过滤器之前的变量@test\u suite\u num 在控制器中的new函数中,我使用变量@test\u suite\u num过滤名为test的表,以获取id与@test\u suite\u num匹配的条目的计数。我使用此计数生成适当数量的子资源test\u run 我对create也这样做,但出于某种原因,每当我在依赖@test\u suite\u num的表单中使用这些变量时,我都会得到零错误。我假设,由于create从不接受参数,因

我传入:number作为参数,然后将其分配给控制器中
过滤器之前的变量@test\u suite\u num

在控制器中的
new
函数中,我使用变量@test\u suite\u num过滤名为
test
的表,以获取id与@test\u suite\u num匹配的条目的计数。我使用此计数生成适当数量的子资源
test\u run

我对
create
也这样做,但出于某种原因,每当我在依赖
@test\u suite\u num
的表单中使用这些变量时,我都会得到零错误。我假设,由于create从不接受参数,因此变量从未初始化。如何在
create
函数中使用@test\u suite\u num

控制器代码:

before_filter :get_number, :only => [:new, :create]

def get_number
    @test_suite_num = params[:number]
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>
显示/Users/vsp/Documents/rails\u projects/web\u db/app/views/test\u suite\u runs/\u form.html.erb,其中第13行出现:
为nil调用id,它会错误地为4——如果您确实想要nil的id,请使用object_id
提取的源(第13行附近):
10: 
11: 
12: 
13:测试

14: 15:builder%> 16:
显然,这意味着创建控制器没有获取参数[:number],因此表单提交中断。我的create函数有什么问题吗


参数:{“utf8”=>“✓", "“测试的套件运行的测试的测试运行的测试运行的测试运行的测试运行的测试运行的测试运行的测试运行的测试运行的测试运行的测试的运行的测试的运行的测试的运行的测试的运行的属性的属性“=>{{”0”0”0”0”7,”0”0”0,”0”0”0”3”0”0”0”0”0”3”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”3=>>>>,,,,,,,,,)0”0”0”0”0”0”0”0”若若若若若若若若”0”0”0”0”0”0”0”0”0”0”若若若若若若若若若若若若若若若”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”0”“6”,“机器id=>”,“日期=>”,“2012-07-09 15:59:53-0700”,“状态=>”,“结果=>”,“3”=>“{”测试id=>“7”,“机器id=>”,“日期=>”,“2012-07-09 15:59:53-0700”,“状态=>”,“结果”=>,“日期”=>“2012-07-09 15:59-0700”,“提交”=>“提交”;“操作”=>“创建”,“控制器”=“测试套件”


仔细看,这只是我表单中的所有文本输入字段。

你做了一件非常奇怪的事情。而不是将
@test\u suite\u num
分配给一个实例变量并放入一个getter方法(这非常尴尬和奇怪),在筛选之前去掉该
,然后完全删除该方法。事实上,甚至不要使用
@test\u suite\u num
,因为它看起来不像您正在使用它

相反,只需使用
params[:number]
,就像您在应用程序中使用的那样

如果这不起作用,请在创建操作中执行
将参数放置到
,并向我们展示提交表单时发生的情况


(另外,作为一个脚注:查找Ruby中的实例变量,因为它看起来像是误用了它们。)

您能做一个
将params.to_s
放在创建操作的顶部吗?视图仍然会失败,但服务器会在服务器日志中显示这些参数
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>