
Введение:
В этом блоге будет руководство о том, как реализовать подобную функцию в приложении rails. Прежде чем мы начнем, следует обратить внимание на то, что, хотя он нацелен на людей, которые относительно плохо знакомы с Rails, вам потребуется определенный уровень фундаментальных знаний, чтобы получить максимальную отдачу от этого блога, если у вас возникнут проблемы с пониманием терминов. Я использую, я рекомендую поискать в Google более подробные сообщения в блоге, которые охватывают основы, прежде чем вернуться сюда, чтобы изучить эту конкретную реализацию.
Шаг первый:
Первое, что нам нужно сделать, это наметить взаимосвязи между нашими моделями и принять к сведению, что вам не нужно называть свои модели такими же, как у меня, мои - просто примеры. Кроме того, наши модели пользователей будут иметь много лайков, наши сообщения также будут иметь много лайков, и каждый лайк будет принадлежать отдельному пользователю и отдельному сообщению. Эти отношения можно представить так:

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

Здесь мы вложили маршруты для модели Like внутри маршрутов для нашей модели Post, это помогает настроить некоторые удобные функции, в которых лайки создаются с привязкой к определенной публикации. Я также использовал универсальные «ресурсы», чтобы предоставить контроллерам двух моделей все маршруты CRUD, но в этом нет необходимости, и вы, возможно, захотите сократить это позже. Функциональность, о которой я упоминал ранее, будет дополнена добавлением этой зависимости в наш оператор has_many в модели Post:

Шаг третий:
Теперь мы настроим наши контроллеры, нашему контроллеру сообщений не нужно ничего особенного добавлять, только методы и функции CRUD позволят ему работать. Однако наш контроллер лайков должен быть довольно сложным и не очень рутинным, поэтому давайте разберем его:

Во-первых, у нас есть три вызова метода before_action, вы можете в значительной степени игнорировать первый для целей этого руководства, поскольку он относится к Auth. и это несколько выходит за рамки этого руководства, все, что вам нужно знать, это то, что в этом примере приложения пользователь должен войти в систему, чтобы поставить лайк. Второй вызывает вспомогательный метод, определенный ниже "private", который устанавливает переменную экземпляра, равную сообщению, которому принадлежит this like. Третий устанавливает другую переменную экземпляра, равную той, которую выбрал пользователь, и мы используем только это последнее действие before_action для метода уничтожения.
Теперь перейдем к двум нашим основным методам: созданию и уничтожению. Наша функция лайков будет сопровождаться отличной функцией, которая позволяет пользователю удалять свои лайки в случае, если они ошибочно нажали лайк или у них возникли другие мысли. Метод create проверяет, не понравился ли этот пост пользователю, а затем использует переменную экземпляра поста для создания лайка, который принадлежит как этому посту, так и текущему пользователю. У вызываемого метода current_user есть helper_method в ApplicationController, который просто возвращает экземпляр пользователя, связанный с текущим сеансом, то есть пользователя, который в данный момент вошел в систему. Затем пользователь перенаправляется обратно на страницу сообщения, Надеюсь, им будет казаться, что они никогда не уходили. Destroy имеет аналогичную структуру, с ключевым отличием в том, что вместо использования переменной экземпляра post и метода current_user для создания нового подобного объекта destroy используется найденная нами переменная экземпляра подобного типа для уничтожения подобного, или, другими словами, в отличие от Почта.
Шаг четвертый:
Наконец, мы настроим нашу страницу просмотра публикаций. Но сначала, помните, когда я сказал, что PostsController имеет базовую функциональность CRUD? Убедитесь, что это реализовано, прежде чем продолжить, поскольку эта следующая часть строится на странице просмотра сообщений.
Это не лучший пример того, как стилизовать это, и это немного беспорядочно, но вот очень простой способ добавить эту функцию на страницу просмотра сообщений:

Первая строка проверяет, есть ли у этого сообщения несколько лайков, и правильно ставит метку «Нравится» / «Нравится» во множественном числе. Вторая строка проверяет, нравился ли этот пост текущему пользователю раньше. Строки 3–7 дают пользователю возможность поставить лайк или нет в зависимости от того, понравился ли он ранее.
Вывод:
И все, ребята! В качестве оговорки, я также являюсь наполовину новичком в Rails, так что это может быть не лучший или самый чистый способ сделать это, это просто способ сделать это. Если этот способ не соответствует вашим целям или вам он просто не нравится, существует множество других образовательных блогов на похожие темы, и я рекомендую вам найти их. Если это было полезно, я рад, что был вам полезен :).
Справочный источник:
Https://medium.com/swlh/how-to-add-a-simple-like-button-to-your-rails-6-application-c1040999dc2