Rails 2.3.3: метод touch, быстрый JSON, работа над ошибками

David Heinemeier Hansson, “Rails 2.3.3: Touching, faster JSON, bug fixes”, public translation into Russian from English More about this translation.

Translate into another language.

Мы выпустили Ruby on Rails версии 2.3.3. Этот релиз исправляет много ошибок и добавляет немного нового функционала.

Active Record

* touch -- удобный метод обновления временных меток (timestamp) записей и ничего другого. Он позаимствован из приложений чьи модели "касаются" других, когда они изменяются, такие как комментарий обновления parent.replies_changed_at временной метки после сохранения и удаления. Установка временных меток всех ассоциаций has_many позволяет легко построить ключ для кэширования фрагмента, который охватывает изменения в родительском объекте, но ни в одном из его потомков. Этот шаблон реализуется как belongs_to :parent, :touch => :replies_changed_at. Тогда как изменения потомков parent.replies_changed_at является косательным (touched). :touch => true является аналогом :touch => :updated_at.

* опция :primary_key метода belongs_to для расширенной поддержки наследования схем и использования особого UUID первичного ключа такого вида: belongs_to :employee, :primary_key => 'SSN', :foreign_key => 'EMPID'. Список исправлений: http://github.com/rails/rails/commit/b3ec7b2d03a52e43a4451d522eea7e6499289daa

JSON

* декодирование внутренних интерфейсов (backends) для json и yajl библиотек. Они значительно быстрее, чем внутренний интерфейс yaml используемый по умолчанию. Для начала, установите json из gem и установите ActiveSupport::JSON.backend = 'JSONGem'.

* упрощение пользовательской части кодирования API. Так как JSON библиотеки реализуют to_json с переменной совместимостью, безопасная перегрузка затруднительна. Большинство типичных to_json выглядят следующим образом

def to_json(*encoder_specific_args)
{ :some => "json representation" }.to_json(*encoder_specific_args)
end

поэтому мы "подсушили" (DRYed) пользовательскую часть API, сделав ее более естественной

def as_json(options = {})
{ :some => "json representation" }
end

без уродливых внутренних состояний уязвимых к перегрузке to_json как в публичной части, так и во внутреннем конструкторе API. Rails 3 разделит API явно, поэтому уже надо быть готовыми перейти сейчас с to_json на as_json.

Другие особенности

* добавление опции :concat, предписывающей вспомогательным тегам (tag helpers) производить принудительную конкатенацию. Список исправлений: http://github.com/rails/rails/commit/a491b19502781266b05918cf99b6ba67898e3be9

* восстановление обратной совместимости для AR::Base#to_xml. Список исправлений: http://github.com/rails/rails/commit/7bf9bf3dd6b4c4d78214917f0877536d222098bb

* переход с BlueCloth на Markdown для помощника markdown. Пользователи использующие BlueCloth для сохранения функциональности своего markdown должны обновиться до версии 1.0.1 или 2.0.5 с тем, чтобы восстановить совместимость.

Работа над ошибками

* Исправлены ошибки, вызванные перегрузкой класса и потоком ответов в режиме разработки.

* Несколько исправлений в процессе создания gem, распаковки и установки системы.

* Создан text_area_tag, который по-умолчанию экранирует содержимое.

* Создан filter_parameters, который работает корректно с массивом параметров.

* Thread-safety исправления для заключения строк PostrgreSQL в кавычки.

* Исправлено качество выполнения для ответов с крупными телами (bodies).

Original (English): Rails 2.3.3: Touching, faster JSON, bug fixes

Translation: © Роман .

translated.by crowd

Like this translation? Share it or bookmark!