Содержание
Введение
Это третья и последняя часть серии статей о том, как создать веб-приложение в стиле 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 UsersControllerWe 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, если вы еще этого не сделали.