有些客户会有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
我得到“未定义的方法`问题'。”不知道我做错了什么。
感谢。
答案 0 :(得分:3)
您在Ruby数组(.question
)上调用@questions
,该数组没有question
方法。
块参数q
是您希望在每次迭代时访问的单个问题。
答案 1 :(得分:1)
您可以使用map
@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。