Проект: Финальный проект на Ruby on Rails!

Не забывайте использовать Git для фиксации изменений в ваших проектах!

Проект: Создание Facebook

Вы прошли долгий путь, поздравляю! На этом этапе вы уже должны чувствовать себя комфортно, создавая новые приложения на Rails, моделируя данные и работая с формами. Этот проект подвергнет испытанию все ваши новообретенные знания. Он послужит отличным примером для портфолио и покажет на что вы способны. Вам придется подумать и это потребует времени, но, конечно же, у вас уже есть все необходимые для этого навыки.

Вы будете создавать Facebook. Как обычно, внешний вид будет зависеть от вас, но, действительно, важной вещью будет работа с данными и корректная работа бэкенда. Вы соедините вместе несколько основных возможностей платформы: пользователей, профили, дружественные связи, посты, ленту новостей и возможность ставить лайки. Также будет реализована авторизация через реальный Facebook, при помощи гемов Omniauth и Devise.

Некоторые Facebook-фитчи мы еще не рассматривали, например, чат, обновления ленты новостей и уведомлений в реальном времени. Никто вас не осудит, если захотите прыгнуть выше головы и попробуете это сделать.

Ваша задача

Создать Facebook! В этом проекте вы создадите большую часть основного функционала Facebook, который связан с пользователями. Мы не будем придавать большого значения фронтенду и не будем пытаться реализовать удобный интерфейс для работы пользователей.

Вам придется написать как минимум несколько интеграционных тестов, которые позволят знать, что каждая страница загружается верно, а так же модульные тесты, чтобы быть уверенными в том, что связи работают правильно (например, проверить, что User.first.posts работает верно).

Этот проект позволяет реализовать достаточно высокие требования в виде работающего веб-сайта. Для некоторых гемов, которые вы будете использовать, нужно будет ознакомиться с документацией на Github.

Держите следующие требования в уме. Для начала мы опишем конкретные шаги, чтобы начать:

  1. Используйте базу данных PostgreSQL (не используйте sqlite3), в этом случае деплой на Heroku будет достаточно гладким. Посмотрите документацию на Heroku с информацией по настройке.
  2. Пользователь должен авторизоваться, чтобы увидеть что-то на странице.
  3. Для аутентификации пользователей необходимо использовать гем Devise. Devise предоставляет все необходимые методы и вам не нужно постоянно писать свои собственные для работы с паролями, сессиями и определения текущего пользователя (метод #current_user). Посмотрите Railscast (там используется Rails 3) для пошагового введения. Документация будет более актуальной.
  4. Пользователь может отправлять запрос на добавление в друзья другому пользователю.
  5. Пользователь должен принять запрос на добавление в друзья, чтобы стать чьим-то другом.
  6. Запрос о дружбе отображается в секции уведомлений навигационной панели пользователя.
  7. Пользователь может создавать посты (для начала в виде текста).
  8. Пользователь может ставить лайки к постам.
  9. Пользователь может писать комментарии к постам.
  10. Посты должны всегда отображаться со следующим содержанием: сам текст поста, автор, комментарии и лайки.
  11. Сделайте страницу списка постов в виде хроники как на Facebook, показывая все последние посты текущего пользователя, а также посты его друзей.
  12. Пользователь может создавать профиль с фотографией (для начала достаточно будет использовать Gravatar, как вы это делали в Учебнике по Rails)
  13. Страница пользователя будет содержать информацию из его профиля, фотографию и список постов.
  14. На странице списка пользователей будут выводится все пользователи, у каждого пользователя, кто еще не является другом или от которого не ожидается ответа на запрос в друзья, будет кнопка для отправки запроса на добавление в друзья.
  15. Для авторизации через Facebook-аккаунт используйте Omniauth. Посмотрите RailsCast по авторизации через Facebook при помощи гема Devise, где по шагам показано как это работает.
  16. Настройте отправку электронных писем, чтобы отправлять письма при регистрации новых пользователей. Используйте гем letter_opener (смотрите документацию здесь) для тестирования этого во время разработки.
  17. Сделайте деплой вашего приложения на Heroku.
  18. Настройте аддон SendGrid и начните отправлять реальные письма. Это бесплатно для небольшого количества писем.

Дополнительное задание:

  1. Сделайте возможность прикреплять также картинку к посту (указав URL картинки или еще сложнее, добавьте возможность ее загрузки).
  2. Используйте гем Paperclip, который позволит загружать картинки для профиля пользователя.
  3. Сделайте возможность делать посты как в виде текста, так и в виде картинок, используя полиморфную связь (при этом у пользователе сохраняется возможность ставить к ним лайки и писать комментарии).
  4. Сделайте крутой внешний вид! Мы нырнем в HTML/CSS в следующем курсе.

Начало работы

  1. Подумайте о структуре данных, которая требуется, чтобы это все работало. Здесь много моделей и связей, уделите этому время, чтобы все распланировать.
  2. Создаете новое Rails приложение с PostgreSQL $ rails new codenamecrud-facebook --database=postgresql, инициализируйте Git репозиторий и обновите README файл, в котором укажите ссылку на эту страницу.
  3. Работайте в своем темпе по списку выше! Каждый шаг будет новым вызовом, но у вас есть все инструменты.
  4. Вы можете заполнить такие данные как пользователи и посты при помощи гема Faker, который представляет из себя всего лишь библиотеку с образцами различных имен и email-адресов. Хотя это должно быть довольно просто для вас, сделать все это вручную, используя файл db/seeds.rb, который будет исполнен командой $ rake db:seed.

Решения студентов

Дополнительные ресурсы

Этот раздел содержит полезные ссылки на дополнительные материалы. Они не обязательны, так что расценивайте их как нечто полезное, если вы хотите поглубже погрузиться в тему

Поделиться уроком: