我目前正在创建一个应用程序,用户可以创建问题供所有人回答,然后用户可以回答这些问题,应用程序会为每个用户跟踪这些答案。
所以我有2个表“问题”和“答案”。
创建一个问题已经有效了,但是现在我只是一次只为用户显示一个问题,他还没有回答,然后显示他还没有回答的下一个问题
我希望有人可以向我解释如何一次只显示一个表记录,然后有效地跟踪哪些问题已经回答。
由于
答案 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中实现。