Простое приложение Twitter с Ruby on Rails — построение дружеских отношений

Простое приложение Twitter с Ruby on Rails — построение дружеских отношений

Введение

Это третья и последняя часть серии статей о том, как создать веб-приложение в стиле Twitter с помощью Ruby on Rails. В этой части будет рассказано, как добавить дружбу между пользователями.

  • первая часть этого руководства: Простое приложение Twitter с Ruby on Rails — сообщения с Ajax
  • вторая часть этого руководства: Простое приложение Twitter с Ruby on Rails — Аутентификация пользователя

Самореферентные отношения

Друзья

Чтобы создать дружеские отношения между пользователями, мы должны иметь дело с особым типом ассоциации, который называется самореферентным отношением. Это называется так, потому что модель (в данном случае User) ссылается сама на себя. Почему? Ну, если у данного «пользователя» много «друзей», то эти «друзья» тоже являются «пользователями». Кроме того, у каждого из этих друзей также могут быть друзья, поэтому мы имеем дело с отношением «многие ко многим».

Отношения можно аффективно назвать «дружбой», потому что дружбу можно приобрести и потерять (как и в реальной жизни). Итак, давайте создадим модель дружбы с двумя внешними ключами.


  > ruby script/generate model friendship user_id:integer friend_id:integer

Теперь перенесите базу данных: —

  > rake db:migrate

Заводить и терять друзей

Заводить друзей

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

  > ruby script/generate controller friendships

Теперь добавьте методы создания и уничтожения, как показано ниже:

class FriendshipsController  params[:friend_id])
    if @friendship.save
      flash[:notice] = "Added friend."
      redirect_to root_url
    else
      flash[:error] = "Error occurred when adding friend."
      redirect_to root_url
    end
  end
  
  def destroy
    @friendship = current_user.friendships.find(params[:id])
    @friendship.destroy
    flash[:notice] = "Successfully destroyed friendship."
    redirect_to root_url
  end
end

Страница друзей

Итак, с чем именно мы связываем пользовательскую модель?? Ну, во-первых, нам нужно указать, что модель дружбы принадлежит другу (который на самом деле является пользователем!). Вы можете сделать это, добавив еще несколько строк в пользовательскую модель:

class Friendship  "User"
end

Нам нужно добавить две строки в модель пользователя. Пользователь имеет много друзей и имеет много друзей благодаря дружбе. Это читается почти так же, как закодировано, что является свидетельством Ruby on Rails.

class User  :friendships
  ...
end

Список ваших друзей

Список друзей

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

user), :method => :post %>

Список друзей

Теперь давайте поместим действия контроллера на место. Откройте файл users_controller и добавьте методы index и show.

class UsersController 


We need to do two more things before we can give this a whirl. First add the friendships resource to the routes file:-

map.resources :friendships


…и, наконец, мы можем добавить несколько ссылок в файл posts/index.html.erb:

...


"users", :action => "show", :id => current_user } %>

Хорошо, теперь мы можем запустить сервер и перейти к http://localhost:3000, чтобы посмотреть.

Домашняя страница

Краткое содержание

Очевидно, что есть несколько направлений, в которых вы могли бы использовать это приложение. Можно было бы добавить много функций и немного улучшить. Я надеюсь, что эти уроки помогли вам в чем-то, и еще раз, я настоятельно рекомендую вам попробовать Ruby on Rails, если вы еще этого не сделали.

Автор: Фил МакКлюр

Фил Макклюр — разработчик программного обеспечения из Белфаста, Северная Ирландия. Его основные интересы — архитектура программного обеспечения, шаблоны проектирования и их применение в веб-разработке. Блоги Фила на Железнодорожный мир. Следуйте за ним на Твиттер.

Пишите для нас! Мы ищем интересные и креативные статьи, если вы хотите внести свой вклад, просто отправьте нам электронное письмо.