# coding: utf-8

2.3.3 A user has_many microposts (Пользователь имеет_много микросообщений)

Одна из наиболее мощных функций Rails – возможность формировать связи между различными моделями данных. В случае нашей модели User у каждого пользователя потенциально есть много микросообщений. Мы можем выразить это в коде, обновив модели User и Micropost как в Листинге 2.10 и Листинге 2.11.

Листинг 2.10. У пользователя есть много микросообщений (user has many microposts).

app/models/user.rb
  class User < ActiveRecord::Base

    has_many :microposts
  end
Листинг 2.11. Микросообщения принадлежат пользователю (micropost belongs to a user).

app/models/micropost.rb
  class Micropost < ActiveRecord::Base
    belongs_to :user
    validates :content, :length => { :maximum => 140 }
  end

Мы можем посмотреть результат этой ассоциации в Рис. 2.15. Из-за user_id столбца в таблице microposts Rails (используя Active Record) может вывести микросообщения, связанные с каждым пользователем.

Рисунок 2.15: Связь между микросообщениями и пользователями.

Рисунок 2.15: Связь между микросообщениями и пользователями.

В Главе 11 и Главе 12, мы будем использовать ассоциацию пользователей и микросообщений и чтобы вывести на экран все микросообщения пользователя и чтобы создать Twitter-подобную подачу микросообщений. Пока, мы можем исследовать применение связи микросообщения-пользователь с помощью консоли, которая является полезным инструментом для взаимодействия с приложениями Rails. Мы сначала вызовем консоль командой rails console в командной строке, а затем получим первого пользователя из базы данных, используя User.first (поместив результаты в переменную first_user):13

  $ rails console
  >> first_user = User.first
  => #<User id: 1, name: "Michael Hartl", email: "[email protected]",

  created_at: "2010-04-03 02:01:31", updated_at: "2010-04-03 02:01:31">
  >> first_user.microposts
  => [#<Micropost id: 1, content: "First micropost!", user_id: 1, created_at:

  "2010-04-03 02:37:37", updated_at: "2010-04-03 02:37:37">, #<Micropost id: 2,
  content: "Second micropost", user_id: 1, created_at: "2010-04-03 02:38:54",
  updated_at: "2010-04-03 02:38:54">]
  >> exit

(Я включил последнюю строку только чтобы продемонстрировать, как выйти из консоли, и на большинстве систем Вы можете Ctrl-d с этой же целью.) Здесь мы получили доступ к микросообщениям пользователя, используя код first_user.microposts: с этим кодом Active Record автоматически возвращает все микросообщения с user_id равным id first_user (в данном случае, 1). Мы узнаем намного больше о средствах ассоциации (связи) в Active Record в Главе 11 и Главе 12.

# coding: utf-8