将记录的一个字段拉入Rails 3应用程序中的数组

时间:2011-05-15 19:06:36

标签: ruby-on-rails-3

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]。

感谢。

3 个答案:

答案 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) }