一次显示一个表记录?

时间:2011-07-25 16:05:52

标签: ruby-on-rails

我目前正在创建一个应用程序,用户可以创建问题供所有人回答,然后用户可以回答这些问题,应用程序会为每个用户跟踪这些答案。

所以我有2个表“问题”和“答案”。

创建一个问题已经有效了,但是现在我只是一次只为用户显示一个问题,他还没有回答,然后显示他还没有回答的下一个问题

我希望有人可以向我解释如何一次只显示一个表记录,然后有效地跟踪哪些问题已经回答。

由于

4 个答案:

答案 0 :(得分:1)

我认为您有以下型号:

class Question..
  has_many :answers
end

class User..
  has_many :answers

  def answered_questions
    answers.collect {|answer| answer.question}
  end

  def unanswered_questions
    Question.all - answered_questions
  end

  def next_unanswered_question
    unanswered_questions.first
  end

end

class Answer..
  belongs_to :question
  belongs_to :user
end

然后在您的控制器中,您可以拥有以下

class AnswersController...
  def new
    @question = current_user.next_unanswered_question

    if @question.nil?
      flash[:notice] = 'You are done!'
    end
  end
end

答案 1 :(得分:0)

在问题表格中创建一个“已回答”的属性(0 =未回答,1表示未填写) 然后:

        SELECT * FROM questions WHERE anwsered = '0' LIMIT 1

答案 2 :(得分:0)

您可以设置路由,以便/ question /:id显示该ID的问题。回答后,您可以将此人的答案添加到答案的表格中,然后转到下一个ID。

要确保用户没有两次回答同一问题,请在加载每个问题时进行检查,以确保用户在表格中没有答案。

答案 3 :(得分:0)

您可以将其作为其他集合和范围实现,如下所示:

class User
    has_many :answers
    has_many :answered_questions, :through => :answers, :class_name => 'Question'
end

class Question
  scope :unanswered_question_for_user, lambda { |answered_questions| where ("id not in (?)",answered_questions).limit(1)
end

class Answer
  belongs_to :question
  belongs_to :user
end

使用它如下:

Question.:unanswered_question_for_user(user.answered_questions)

我假设您正在使用rails 3.同样可以在rails 2.3中实现。