# coding: utf-8
  1. Фотографии для макетов взяты на http://www.flickr.com/photos/john_lustig/2518452221/ и http://www.flickr.com/photos/30775272@N05/2884963755/
  2. Для простоты, Рис. 12.6 подавляет id столбец таблицы following
  3. К сожалению, Rails использует connection для подключения к базе данных, поэтому введение Connection модели приведет к некоторым довольно тонким багам. (Я узнал это на собственной шкуре при разработке Insoshi.) 
  4. Действительно, эта конструкция является столь характерной для Rails, что известный Rails программист Josh Susser использует ее в качестве названия для своего гик блога. 
  5. Технически, Rails использует метод underscore для преобразования имени класса в id. Например, "FooBar".underscore это foo_bar, поэтому внешним ключом для объекта FooBar будет foo_bar_id. (Кстати, инверсией underscore является camelize, который конвертирует camel_case в CamelCase.) 
  6. Если Вы заметили что followed_id также идентифицирует пользователя, и обеспокоены ассиметричным обращением с читателями и читаемыми, вы готовы к любым неожиданностям. Мы будем заниматься этим вопросом в Раздел 12.1.5
  7. Этот метод follow! должен работать всегда, поэтому, (следуя модели create! и save!) мы ставим восклицательный знак и в случае провала будет вызвано исключение. 
  8. Once you have a lot of experience modeling a particular domain, you can often guess such utility methods in advance, and even when you can’t you’ll often find yourself writing them to make the tests cleaner. In this case, though, it’s OK if you wouldn’t have guessed them. Software development is usually an iterative process—you write code until it starts getting ugly, and then you refactor it—but for brevity the tutorial presentation is streamlined a bit. 
  9. Метод authenticate_with_salt включен только в качестве ориентира в файле модели User. 
  10. Метод unfollow! не вызывает исключения при неудаче — фактически я даже не знаю как Rails указывает на провальное уничтожение — но мы используем восклицательный знак для поддержания follow!/unfollow! симметрии. 
  11. Вы могли заметить, что иногда мы получаем доступ к id явно, как в followed.id, а иногда мы просто используем followed. Мне стыдно признаться, но мой обычный алгоритм для выяснения того, что id можно опустить, заключается в проверке работает ли код без .id, а затем в добавлении .id если не сработало. 
  12. Все что содержится в Листинге 12.28 было раскрыто в других местах этого руководства, так что это хорошее упражнение в чтении кода. 
  13. Так как номинально это является акронимом asynchronous JavaScript and XML, Ajax иногда ошибочно пишут как “AJAX”, хотя на протяжении всей оригинальной Ajax статьи используется написание “Ajax”. 
  14. Это работает, только если JavaScript включен в браузере, но это degrades(??) изящно, работая в точности как в Разделе 12.2.4 если JavaScript отключен. 
  15. В этот момент вы должны включить дефолтную Prototype JavaScript Library в Ваше Rails приложение как в Листинге 10.39 если Вы этого еще не сделали. 
  16. Нет никакой связи между этим respond_to и respond_to используемым в RSpec примерах. 
  17. Основное требование заключается в том, что перечисляемые объекты должны реализовывать each метод для перебора коллекции. 
  18. Эта запись фактически началась, как расширение Rails, внесенное в ядро ​​языка Ruby; она была настолько полезной, что в настоящее время она включена в сам Ruby. Замечательно, правда? 
  19. Вызов paginate на объект Array преобразует его в объект WillPaginate::Collection, но это не сильно нам поможет, поскольку весь массив уже создан в памяти. 
  20. Функция в комплекте с элементом данных (пользователем, в данном случае) называется замыкание, мы с ним сталкивались при кратком обсуждении блоков в Разделе 4.3.2
  21. Для более продвинутых способов создания необходимых подзапросов, см. сообщение в блоге “Hacking a subselect in ActiveRecord”. 
  22. Конечно, даже подзапрос не масштабирует навсегда. Для больших сайтов Вам, вероятно потребуется генерировать поток сообщений асинхронно используя фоновый процессы. Такие тонкости масштабирования выходят за рамки этого учебника, но скринкасты Scaling Rails являются хорошей отправной точкой. 
  23. Для того чтобы сделать поток сообщений более привлекательным в Рис. 12.20, я добавил несколько дополнительных микросообщений вручную используя Rails консоль. 
  24. В этом можно убедиться, изучив SQL выражения в в лог-файле сервера разработки. (Rails Tutorial screencasts раскрывают подобные тонкости более подробно.) 
  25. Единственная моя оговорка по поводу Railscasts — они обычно опускают тесты. Это, вероятно, необходимо для сохранения красоты и краткости эпизодов, но у вас может сформироваться неправильное представление о важности тестов. После просмотра соответствующего Railscast для получения представления о процессе, я советую писать новую фнкцию используя разработку через тестирование. 
  26. In addition to being a clever phrase — new relic being a contradiction in terms (??) — New Relic также является анаграммой имени основателя компании, Lew Cirne. 
  27. # позволю себе небольшой комментарий к переводу этой главы. В тексте очень часто употребляются различные формы слова follow (following, follower, followers и т.п.) в дословном переводе это означает "следовать" (слежение, следящий, следящие соответственно). Однако Twitter, (клоном которого является пример приложения, рассматриваемый в этом учебнике) вместо дословного перевода, использует термины "Читает" (для following) и "Читают" (для followers) и лично мне термин "Читатели" вместо возможного дословного перевода (следователи, последователи и т.п.) нравится больше. И, несмотря на несколько казусов с этим связанных, в оставшейся части учебника я постараюсь придерживаться именно этого варианта.
    P.s. Надеюсь данный комментарий не запутал Вас окончательно. :)
     
# coding: utf-8