从嵌套的哈希对象中检索数据

时间:2013-02-28 07:23:04

标签: ruby-on-rails

我创建了一个这样的表单

    @question = Question.new 
    3.times {@question.answers.build}

如果它没有验证,我将重新显示填充了数据的表单。填写问题数据并不难

  @question = @user.questions.new(session[:question])

但是,我在从答案模型(具有内容和链接字段)的会话哈希中获取嵌套值时遇到问题。这不起作用。

 3.times {@question.answers.build(:content => session[:question][:answers_attributes][:content], :correctanswer => session[:question][:answers_attributes][:correctanswer]) }

我认为这是因为哈希对象中的0,1和2迭代。例如,这是哈希对象的一个​​片段(如下所示)

"answers_attributes"=>{"0"=>{"content"=>"",

但我不知道在构建问题答案时我会如何表示

 3.times {@question.answers.build(:content => session[:question][:answers_attributes][:content]....

当我尝试构建时,我不会在尝试从哈希对象中提取数据时表示迭代。你能解释我如何修改这一行来将参数传递给question.answers.build

这是哈希对象。

>    Parameters: {"utf8"=>"✓", "question"=>{"content"=>"Lick me",
> "link"=>"bab", "answers_attributes"=>{"0"=>{"content"=>"",
> "correctanswer"=>"0", "_destroy"=>"false"}, "1"=>{"content"=>"",
> "correctanswer"=>"1", "_destroy"=>"false"}, "2"=>{"content"=>"",
> "correctanswer"=>"0", "_destroy"=>"false"}}}, "commit"=>"Create
> Question"}

1 个答案:

答案 0 :(得分:1)

由于参数中有三组键/值,因此最好循环参数并在每次迭代时构建questions.answers,如下所示。这样,您可以通过传入键来表示嵌套哈希中的迭代。

@question = @user.questions.new(session[:question])
session[:question][:answers_attributes].each do |k,v|
        @question.answers.build(:content => session[:question][:answers_attributes][k][:content], :correctanswer => session[:question][:answers_attributes][k][:correctanswer])

       end