Разрешение пользователям скрывать представления в Rails 3 - PullRequest
0 голосов
/ 04 сентября 2011

У меня есть сайт, на котором пользователи отправляют заявки, и все они отображаются на главной странице. Я хочу поставить маленькую кнопку на каждую отправку, которая говорит "скрыть" ... Если пользователь щелкает эту ссылку, он больше не будет видеть отправку в любом месте на сайте.

В настоящее время мое индексное действие для отправки просто:

def index
  @submissions = Submission.order("created_at DESC")
end

Мой план состоял в том, чтобы создать модель, спрятанную так:

rails g model hidden user_id:integer submission_id:integer

Затем создается скрытый экземпляр модели, когда пользователь что-то скрывает. Затем я должен обновить свой контроллер до чего-то вроде:

def index
  @submissions = Submission.order("created_at DESC").includes("hidden").where("hiddens.user_id IS NULL")
end

Хотя это, очевидно, не сработает.

У меня есть хорошая схема базы данных для этого? Какой самый эффективный запрос я могу сделать, чтобы убедиться, что я не отображаю скрытые сообщения?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Если бы я что-то не пропустил, я бы просто добавил «скрытый» атрибут в модель представления (логическое значение).

Когда пользователь нажимает на вашу ссылку "скрыть", вы устанавливаете для атрибута значение true.

Затем вы просто ищете предложения с установленным флагом false:

Submission.where(:hidden => false)
0 голосов
/ 04 сентября 2011

У вас должно быть 3 таблицы:

  1. Представление
  2. Скрыто
  3. Пользователь

обратите внимание, что у вас много-много-много ассоциаций. Теперь каждый раз, когда пользователь нажимает кнопку, чтобы скрыть Submission, вы создаете строку в таблице Hidden с соответствующими submission_id и user_id. Затем в вашем контроллере вы можете получить все Представления без идентификаторов, которые пользователь пометил как «скрытые».

Между прочим: знайте, что вы должны реализовать обратное от сокрытия (в случае, если кто-то допустил ошибку или передумал0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...