有些客户会有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
我得到"未定义的方法'问题'。"我不知道我做错了什么。
谢谢。
你在一个Ruby数组(@questions
)上调用.question
,它没有question
方法。
块参数q
是您希望在每次迭代中访问的单个问题。
在ruby中使用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