Отображение одной записи таблицы за раз? - PullRequest
0 голосов
/ 25 июля 2011

В настоящее время я создаю приложение, в котором пользователи имеют возможность создавать вопросы, на которые каждый может ответить, а затем пользователи могут отвечать на эти вопросы, и приложение отслеживает эти ответы для каждого отдельного пользователя.

Так что яу меня есть 2 таблицы «вопросы» и «ответы».

Создание вопроса уже работает, но теперь я застрял при отображении только одного вопроса за раз для пользователя, которого у него нетответил еще, а затем отобразил следующий вопрос, на который он еще не ответил.

Я надеюсь, что кто-нибудь сможет объяснить мне, как показывать только одну запись таблицы за раз, а затем эффективно отслеживать, какие из этих вопросов былиответил.

Спасибо

Ответы [ 4 ]

1 голос
/ 25 июля 2011

Я думаю, что у вас есть следующие модели:

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
0 голосов
/ 27 июля 2011

Вы можете реализовать их как другие коллекции и области следующим образом:

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)

Я предполагаю, что вы используете рельсы 3. То же самое можно реализовать и в рельсах 2.3.

0 голосов
/ 25 июля 2011

Вы можете настроить маршруты так, чтобы / question /: id показывал вопрос об этом идентификаторе. После ответа вы можете добавить ответ этого человека в таблицу ответов и перейти к следующему идентификатору.

Чтобы убедиться, что пользователь не отвечает на один и тот же вопрос дважды, проверьте загрузку каждого вопроса, чтобы убедиться, что у пользователя еще нет ответа в таблице.

0 голосов
/ 25 июля 2011

Создайте атрибут «anwsered» в ваших таблицах вопросов (0 = не anwsered, 1 anwsered) И затем:

        SELECT * FROM questions WHERE anwsered = '0' LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...