База данных, Active Record, CSRF-токены и шаблонизатор / Пишем соцсеть на Ruby On Rails 6 #2

Поділитися
Вставка
  • Опубліковано 21 тра 2024
  • Привет! Во второй части мы будем работать с динамическими данными из PostgreSQL и c Active Record: выводить список постов, в том числе по топикам, создавать и редактировать посты. Также мы разберем как реализована защита от CSRF атак в Ruby On Rails.
    Код тут: github.com/overeng/rubysocial
    00:00 Коротко о чем видео
    00:55 Устанавливаем PostgreSQL, создаем юзера для БД
    02:33 Конфигурим Rails для работы с PostgreSQL
    05:04 Создание моделей
    07:40 Запускаем миграции
    10:09 Создаем шаблон формы, расставляем теги шаблонизатора, вытаскиваем топики из базы данных
    14:12 Сохраняем пост в базе данных
    15:52 Защита от CSRF
    18:12 Просмотр поста: шаблон + handler
    19:29 Список постов на главной
    21:11 Редактирование поста
    25:07 Отображаем посты с разбивкой по топикам

КОМЕНТАРІ • 24

  • @user-kv8og1bd5k
    @user-kv8og1bd5k 3 роки тому +2

    4:58
    Для пользователей unix систем рекомендую создавать роль в pg не application, как Ксения, а одноименно своей учетной записью на пк.
    Связанно это с тем, что по умолчанию psql соединение осуществляется через сокеты UNIX с использованием peer аутентификации и она требует совпадения имён роли и юзера.
    Как альтернатива - вам придется внести изменения в файл pg_hba.conf, заменив peer аутентификацию на md5, чтобы сработала команда db:create и прочие обращения к базе данных.
    Воспользуюсь случаем и выражу благодарность Вам, Ксения. Спасибо за потраченное время, силы и нервы :)

  • @kvn47
    @kvn47 9 місяців тому +1

    9:22 ну есть же seeds для этого;) Ну или хотя бы в up это делать, если так уж хочется.

  • @MaksymNenashev
    @MaksymNenashev Рік тому

    Спасибо! За код!

  • @lexsxebelphegore5677
    @lexsxebelphegore5677 4 роки тому +1

    Благодарю за урок! Как раз сейчас учусь работать с CSRF в NodeJS, т.к. я вообще не шарю в стандартах безопасности пришлось заюзать csurf и использовать его с позиции черного ящика, и это плохо. Было бы классно, если бы Вы также рассказали про обеспечение безопасности на бэке в целом, какие наиболее распространенные бэкдоры оставляют разработчики, и как бэк тестируется на безопасность и отказоустойчивость.

    • @OverEngineer
      @OverEngineer  4 роки тому +2

      Алексей Варов спасибо за идею! подумаю над этим

  • @caveofmovies8597
    @caveofmovies8597 4 роки тому +1

    Спасибо за видео! Что вы используете в качестве фронта чистый js или библиотеку(react, stimulus reflex)?

    • @OverEngineer
      @OverEngineer  4 роки тому +3

      в этом проекте почти вся логика сосредоточена на бэкенде, поэтому ни реакта, ни даже чистого js тут почти не будет.

  • @user-jd4kb3qt9r
    @user-jd4kb3qt9r 2 роки тому

    Есть проблема на вкладке создания поста сайдбар съезжает вниз
    Хотя на других вкладках все нормально. Никак не пойму как это работает. Может сталкивался кто?

  • @egorarbuzov3375
    @egorarbuzov3375 3 роки тому

    ActiveRecord::RecordNotFound in PostsController#show когда хожу по топикам

  • @hecsonic
    @hecsonic 3 роки тому

    Что за IDE, подскажите?

  • @user-vr3qe6hh1u
    @user-vr3qe6hh1u 3 роки тому

    При создании бд появилась ошибка. Решить не получилось
    warning ../package.json: No license field
    FATAL: Peer authentication failed for user "application"
    Couldn't create 'purrpurr_development' database. Please check your configuration.
    rake aborted!
    PG::ConnectionBad: FATAL: Peer authentication failed for user "application"
    /home/danil/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
    /home/danil/.rbenv/versions/2.5.1/bin/bundle:23:in `'
    Tasks: TOP => db:create
    (See full trace by running task with --trace)

    • @OverEngineer
      @OverEngineer  3 роки тому

      а пароль положили в переменную окружения?

  • @postal134
    @postal134 3 роки тому

    NoMethodError in PostsController#topic
    undefined method `posts' for nil:NilClass
    def topic
    @topic = Topic.find_by(alias: params[:topic])
    @posts = @topic.posts
    render 'index'
    end

  • @azavgorodnev93
    @azavgorodnev93 3 роки тому +4

    Вредное видео для новичков
    Роутинг:
    get 'posts/edit/:id', to: 'posts#edit'
    по CRUD правильнее
    get 'posts/:id/edit', to: 'posts#edit'
    или вообще просто
    resources :posts, only [...]
    Миграции:
    Не проставлены null: false, foriegn key, unique
    Везде используются @ - хотя это считается плохим тоном,
    во вьюхи лучше явно передавать переменные через render locals: {...}
    Model.new(params), model.save - лучше заменить просто на model.create!(params)
    Не понимаю зачем кого-то учить если сам только месяц программируешь

    • @OverEngineer
      @OverEngineer  3 роки тому +1

      1. Вкусовщина
      2. Где нет unique?
      foreign key. Тут можно было добавить, да. Однако, хоть для этого приложения неактуально, но любые constraints влияют на производительность insert. В приложениях с большим количеством запросов на запись в секунду foreign key вообще никто не использует. Если нужно загрузить данные в таблицу, то foreign key придется удалить. Пока использование foreign key лично мне не принесло ничего, кроме проблем. Так что нельзя сказать, что foreign key - это best practice для любых случаев.
      3. Про @ - вкусовщина.
      4. Вкусовщина.
      Спасибо за просмотр)

    • @azavgorodnev93
      @azavgorodnev93 3 роки тому +1

      ​@@OverEngineer
      1) Это стандартный Restfull Resource Naming. Рельсы ориентированы на ресурсы - зачем городить свой нейминг урлов не ясно.
      2) А комменты которые ссылаются на несуществующий пост или реплай-коммент - не грузят таблицы, согласен. Если такое большое кол-во запросов валят базу из-за constraints(ооочень надо постараться ) - то брать уже нужно NoSql
      3) Если у тебя опечатка в @, то возращает nil, а не нормальный Exception (undefined local variable or method ) + огромная зона видимости(плохо тестируются, различные side-эффекты, утечки памяти и тд)
      4) Зачем два раза вызывать метод за место одного
      Если такой код тут подается под вкусовщиной - то ладно.
      PS Зато красивая 😊

    • @OverEngineer
      @OverEngineer  3 роки тому +1

      3) тогда вообще джаву лучше использовать, там опечатки вообще в прод не попадут.
      4) перечитала код. Там с вполне конкретной целью два метода - new возвращает объект который будет нужен для рендеринга значений полей в случае ошибки. create как и save возвращает true/false, если заменить на create то @post будет пустым и юзеру все заново заполнять придется.

  • @dev9033
    @dev9033 2 роки тому

    English sub please 🥺

  • @killkill1834
    @killkill1834 4 роки тому

    И ещё вопрос есть создайте себе времени аккаунт гугл и пишите в эту аккаунт гугл studiouz1070656@gmail.com я вам напишу потом на Счёт Германии и как бистро уезжать туда в Америку через Германию легче

    • @caveofmovies8597
      @caveofmovies8597 4 роки тому +2

      какая Германия и Америка, язык для начала выучите

    • @killkill1834
      @killkill1834 4 роки тому

      @@caveofmovies8597 а я уже учусь у нас красная зона