在Rails 3控制器中创建一个数组

时间:2011-05-03 14:52:19

标签: ruby-on-rails-3

有些客户会有30个问题和答案,有些会有20个,有些会有10个。有10个或20个可以增加到下一个级别。在控制器中,我需要填写缺少的答案。我曾希望在控制器中创建一个数组,并匹配问题和答案,然后将一个数组发送到视图。

@questions = Question.order("qtype, position")
@answers = Answer.where(user_id = current_user.id)

@questions.each do |q|
   @qa[q,0] = q.question
   @qa[q,1] = @answers.find_by_question_id(q.id)
   if @qa[q,1].empty?
      @qa[q,1] = 0
   end
end

我得到“未定义的方法`问题'。”不知道我做错了什么。

感谢。

2 个答案:

答案 0 :(得分:3)

您在Ruby数组(.question)上调用@questions,该数组没有question方法。

块参数q是您希望在每次迭代时访问的单个问题。

答案 1 :(得分:1)

您可以使用map

在ruby中轻松完成此操作
@qa = @questions.map { |q| [q, @answers.find_by_question_id(q.id)] }

由于您已经加载了一个正确过滤的答案数组,因此实际上这样做更有效:

@qa = @questions.map { |q| [q, @answers.detect {|a| a.question == q}] }

你最好花些时间阅读ruby中的Array和Enumerable。