2

我创建一个这样的表格

    @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"}
4

1 回答 1

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 
于 2013-02-28T07:53:54.427 回答