2.3.3 A user has_many
microposts (Пользователь имеет_много
микросообщений)
Одна из наиболее мощных функций Rails – возможность формировать связи между различными моделями данных. В случае нашей модели User у каждого пользователя потенциально есть много микросообщений. Мы можем выразить это в коде, обновив модели User и Micropost как в Листинге 2.10 и Листинге 2.11.
app/models/user.rb
class User < ActiveRecord::Base has_many :microposts end
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: Связь между микросообщениями и пользователями.
В Главе 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.