- Фотографии для макетов взяты на http://www.flickr.com/photos/john_lustig/2518452221/ и http://www.flickr.com/photos/30775272@N05/2884963755/. ↑
- Для простоты, Рис. 12.6 подавляет
id
столбец таблицыfollowing
. ↑ - К сожалению, Rails использует
connection
для подключения к базе данных, поэтому введение Connection модели приведет к некоторым довольно тонким багам. (Я узнал это на собственной шкуре при разработке Insoshi.) ↑ - Действительно, эта конструкция является столь характерной для Rails, что известный Rails программист Josh Susser использует ее в качестве названия для своего гик блога. ↑
- Технически, Rails использует метод
underscore
для преобразования имени класса в id. Например,"FooBar".underscore
этоfoo_bar
, поэтому внешним ключом для объектаFooBar
будетfoo_bar_id
. (Кстати, инверсиейunderscore
являетсяcamelize
, который конвертируетcamel_case
вCamelCase
.) ↑ - Если Вы заметили что
followed_id
также идентифицирует пользователя, и обеспокоены ассиметричным обращением с читателями и читаемыми, вы готовы к любым неожиданностям. Мы будем заниматься этим вопросом в Раздел 12.1.5. ↑ - Этот метод
follow!
должен работать всегда, поэтому, (следуя моделиcreate!
иsave!
) мы ставим восклицательный знак и в случае провала будет вызвано исключение. ↑ - 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. ↑
- Метод
authenticate_with_salt
включен только в качестве ориентира в файле модели User. ↑ - Метод
unfollow!
не вызывает исключения при неудаче — фактически я даже не знаю как Rails указывает на провальное уничтожение — но мы используем восклицательный знак для поддержанияfollow!
/unfollow!
симметрии. ↑ - Вы могли заметить, что иногда мы получаем доступ к
id
явно, как вfollowed.id
, а иногда мы просто используемfollowed
. Мне стыдно признаться, но мой обычный алгоритм для выяснения того, что id можно опустить, заключается в проверке работает ли код без.id
, а затем в добавлении.id
если не сработало. ↑ - Все что содержится в Листинге 12.28 было раскрыто в других местах этого руководства, так что это хорошее упражнение в чтении кода. ↑
- Так как номинально это является акронимом asynchronous JavaScript and XML, Ajax иногда ошибочно пишут как “AJAX”, хотя на протяжении всей оригинальной Ajax статьи используется написание “Ajax”. ↑
- Это работает, только если JavaScript включен в браузере, но это degrades(??) изящно, работая в точности как в Разделе 12.2.4 если JavaScript отключен. ↑
- В этот момент вы должны включить дефолтную Prototype JavaScript Library в Ваше Rails приложение как в Листинге 10.39 если Вы этого еще не сделали. ↑
- Нет никакой связи между этим
respond_to
иrespond_to
используемым в RSpec примерах. ↑ - Основное требование заключается в том, что перечисляемые объекты должны реализовывать
each
метод для перебора коллекции. ↑ - Эта запись фактически началась, как расширение Rails, внесенное в ядро языка Ruby; она была настолько полезной, что в настоящее время она включена в сам Ruby. Замечательно, правда? ↑
- Вызов
paginate
на объектArray
преобразует его в объектWillPaginate::Collection
, но это не сильно нам поможет, поскольку весь массив уже создан в памяти. ↑ - Функция в комплекте с элементом данных (пользователем, в данном случае) называется замыкание, мы с ним сталкивались при кратком обсуждении блоков в Разделе 4.3.2. ↑
- Для более продвинутых способов создания необходимых подзапросов, см. сообщение в блоге “Hacking a subselect in ActiveRecord”. ↑
- Конечно, даже подзапрос не масштабирует навсегда. Для больших сайтов Вам, вероятно потребуется генерировать поток сообщений асинхронно используя фоновый процессы. Такие тонкости масштабирования выходят за рамки этого учебника, но скринкасты Scaling Rails являются хорошей отправной точкой. ↑
- Для того чтобы сделать поток сообщений более привлекательным в Рис. 12.20, я добавил несколько дополнительных микросообщений вручную используя Rails консоль. ↑
- В этом можно убедиться, изучив SQL выражения в в лог-файле сервера разработки. (Rails Tutorial screencasts раскрывают подобные тонкости более подробно.) ↑
- Единственная моя оговорка по поводу Railscasts — они обычно опускают тесты. Это, вероятно, необходимо для сохранения красоты и краткости эпизодов, но у вас может сформироваться неправильное представление о важности тестов. После просмотра соответствующего Railscast для получения представления о процессе, я советую писать новую фнкцию используя разработку через тестирование. ↑
- In addition to being a clever phrase — new relic being a contradiction in terms (??) — New Relic также является анаграммой имени основателя компании, Lew Cirne. ↑
- # позволю себе небольшой комментарий к переводу этой главы. В тексте очень часто употребляются различные формы слова follow (following, follower, followers и т.п.) в дословном переводе это означает "следовать" (слежение, следящий, следящие соответственно). Однако Twitter, (клоном которого является пример приложения, рассматриваемый в этом учебнике) вместо дословного перевода, использует термины "Читает" (для following) и "Читают" (для followers) и лично мне термин "Читатели" вместо возможного дословного перевода (следователи, последователи и т.п.) нравится больше. И, несмотря на несколько казусов с этим связанных, в оставшейся части учебника я постараюсь придерживаться именно этого варианта.
P.s. Надеюсь данный комментарий не запутал Вас окончательно. :) ↑