Rails 3 noob在这里。目前我控制器中的代码是在我的数据库中获取整个记录。我试图用一个整数填充数组,而不是整个记录。整数包含在表“answers”中,字段名称为“score”。如何在我的控制器中修改此行以获得一个字段?
@questions.each do |s|
@ans[s.position] = Answer.where("question_id = ? AND user_id = ?", s.q_id, current_user.id )
end
澄清更新:分数可以是0到5之间的任何整数。我想用整数填充@ans [s.position]。
感谢。
答案 0 :(得分:2)
你非常接近
@questions.each do |s|
@ans[s.position] = Answer.where("question_id = ? and user_id = ?",s.q_id,current_user.id).select(:score).first.try(:score)
end
您需要从答案中选择“得分”,然后您需要从对象中检索它。
答案 1 :(得分:1)
由于where
可能会返回多个Answer
,因此请使用first
拉出第一个Answer
,然后score
以展开得分字段
answers = Answer.where("question_id = ? AND user_id = ?", s.q_id, current_user.id )
score = answers.first.score
所有这一切都将是:
@questions.each do |s|
@ans[s.position] = Answer.where("question_id = ? AND user_id = ?", s.q_id, current_user.id ).first.score
end
作为仅从数据库中检索score
的优化,而不是answers.*
,您可以使用select(:score)
。
@questions.each do |s|
@ans[s.position] = Answer.where("question_id = ? AND user_id = ?", s.q_id, current_user.id ).select(:score).first.score
end
有关使用select
的更多信息,请参阅Active Record Query Interface。
答案 2 :(得分:0)
只需include
他们。
@questions = Question.includes(:answers).select(:position)
或者使用此
@questions = Question.select(:position)
@questions.each{ |s| @ans[s.position] = s.answers.where(:user_id => current_user.id) }