Создание приложения — это процесс, и размышление об идее, достойной реализации самостоятельно, может быть монументальной задачей. Но как только эта идея появится в вашей голове, идея, в которой вы очень уверены, вы полны решимости сделать ее так же красиво на экране. Это, конечно, все легче сказать, чем сделать.
Пришло время разработать мое первое приложение, и у меня была эта замечательная идея (такая, описанная выше), но у меня не было Идея Как его реализовать! Несмотря на изучение всего, что мне нужно, чтобы написать основы приложения, я чувствовал себя подавленным. Чтобы облегчить ситуацию, я сел и написал на ручке и бумаге, что я хотел для своего приложения.
- Пользователи/профили
- Посты
- Последователи/Следующие отношения
Хотя это всего лишь три вещи, это три главных вещах! Конечно, мое приложение должно иметь пользователей, и имеет смысл, что у этих пользователей будут сообщения. Но следуют за отношениями? Как я мог это сделать. Когда я впервые посмотрел на слова, я подумал об использовании чего -то вроде хэша или массива, который будет держать всех подписчиков для пользователя. Хотя то, что я сделаю, будет похожим, основной массив или хэш был бы очень неэффективным способом программирования, оставляя только проблемы на потом. После изучения Activerecord и Sinatra я знал, что должен быть лучший способ. Там было! Таблицы и таблицы.
После создания моих пользователей и сообщений/моделей я создал модель Follow. Мой следующий класс появился следующим образом:
class Follow < ActiveRecord::Base belongs_to :follower, foreign_key: 'user_id', class_name: "User" belongs_to :following, foreign_key: 'following_id', class_name: "User" end
Итак, читая это, мы могли бы сказать, что «последователь» принадлежит следующему (так как вы следуете за кем -то). Вместо создания новой таблицы «следует», я присвоил иностранную_Кейн «user_id» «последовательному», присоединившемуся к классу пользователя. Затем мы прочитали бы следующее утверждение как «следующее», принадлежащее следующему (так как это акт следовать за другим пользователем), опять же с иностранным_ кей, но на этот раз это «следующее_ид» (другой идентификатор пользователя), вытащенный из пользовательский класс. Создание этих отношений с иностранными ключами вырезает необходимость создания и переноса новой таблицы (не говоря уже о том, что это не нужно будет делать в будущем в зависимости от того, что делает ваше приложение). Как это кажется, после прочтения его Пару раз это начнет иметь смысл!
Но мы еще не закончили! Мой пользовательский класс также нуждался в некоторых корректировках для размещения новых отношений.
has_many :follows has_many :follower_relationships, foreign_key: :following_id, class_name: "Follow" has_many :followers, through: :follower_relationships, source: :follower has_many :following_relationships, foreign_key: :user_id, class_name: "Follow" has_many :following, through: :following_relationships, source: :following
Поскольку пользователь, мы надеемся, будет следовать многим учетным записям, он имеет много следует. Поскольку у него много следует, это также будет имеет много «Отношения с последователями», это происходит через внешний ключ «следующий_ид», установленное в следующем классе. Далее пользователь будет имеет много «Последователи» через «Отношения последователей» только что создали, а также используют «последователь» Foreign_key, созданный из «user_id» в следующем классе. Опять же, у нас есть аналогичный фрагмент кода, за исключением того, что мы заменяем внешний ключ и источник («следующий»), поскольку это последовательно взаимосвязь. Не так уж плохо, верно?
Я не могу отдать все это своему собственному, я прочитал несколько других постов в блоге, в которых читали попытки и успехи других программистов при создании следующих отношений (один из них был здесь , выкрикивая всех ваших, замечательных людей!) Но то, что я верю в паутину чудес, — это то, как я создал свои посты кто то. Создание и получение (непреднамеренное каламбур там) эти методы для работы были немного больными, но, в отличие от меня, у вас есть это (надеюсь, полезный) пост в блоге! Хорошо, давайте доберемся до этого!
Я создал последователей_контроллера и начал с моего метода следующего.
class FollowersController < ApplicationController post '/users/:id/follow' do follow_user = User.find_by_id(params[:id]) if !current_user.following.include?(follow_user) current_user.following << follow_user end if !follow_user.followers.include?(current_user) follow_user.followers << current_user end redirect '/following' end get '/following' do erb :'/users/following' end
Чтобы создать следующее, я сделал запрос POST «/users/: id/prote», в данном случае «ID» — это пользователь_ид, которому следует ли человека, а не текущего пользователя a.k.a. Этот следующий_ -организатор является эквивалентом следующего, сделанного в следующем классе. Это может немного запутаться, так что держитесь там! В следующей строке кода:
if !current_user.following.include?(follow_user)
Я снова использую следующие, но через имеет много и следующие отношения, созданные в пользовательском классе. Здесь проверяет, есть ли у текущего пользователя (вы) есть следующая_Реляция, включая Toldent_user (последователь). Если это не так, то следующий_ -организатор (последовавший) будет добавлен в следующие_оверные коэффициенты (аналогично вымышленной таблице пользователей и людей, по которым они следуют, и наоборот).
if !follow_user.followers.include?(current_user) follow_user.followers << current_user end
В следующих нескольких строчках кода происходит то же самое, за исключением того, что теперь вместо добавления следующего_усвета (последователя) к пользователю мы добавляем пользователя в следующий с ним. Последние несколько фрагментов демонстрируют путь получения, который я сделал, который направляет пользователя на страницу всех, кого они следуют. И там у вас есть, мы сделали запрос на подпись!
Сделать отписка, верьте, хотите нет, хотите нет, еще проще! Используя тот же маршрут, но переключение «Следуй» на «Отписание», мы можем сделать запрос в трех простых линиях. Как и раньше, я установил следующую_узрину в user_id (это пользователь, который пользователь не соответствует с учетом соответствия). Затем с одним оператором, если я проверил, чтобы увидеть, как у Solute_user есть «текущий пользователь», хранящийся в своих подписчиках. Если я, нынешний пользователь, хранился в подписчиках, моя следующая строка кода разрушает себя из списка пользователей внутри подписчиков. Тогда я больше не следую за этим пользователем! Довольно легко, верно?
post '/users/:id/unfollow' do follow_user = User.find_by_id(params[:id]) if follow_user.followers.include?(current_user) follow_user.followers.destroy(current_user) end redirect "/following" end end
Несмотря на то, что я призываю читать больше в следующих отношениях и действиях, которые сопровождаются с ними, этот пост должен охватывать достаточно основы для реализации в вашем собственном приложении. Надеюсь, вы смогли следовать!
Оригинал: «https://dev.to/mmeurer00/how-to-follow-along-with-followingrelationships-in-your-app-4chd»