routing_concerns или будущее маршрутизации в Ruby on Rails 4.0

июля 3, 2012  |  Published in Ruby on Rails, Ruby on Rails 3  |  4 Comments

spaghetti codeВсего 5 дней назад DHH добавил новый репозиторий организации Rails на Github. представляет собой расширение Rails проверенное на работоспособность только с Rails 3.2 и предназначенное для выDRYивания кода маршрутизации.

Принцип работы плагина простой, вы объявляете concern’ы, а в них помещаете код общий для нескольких ресурсов.

Как есть:

resources :posts do
  resources :comments
  resources :photos
end

resources :photos do
  resources :comments
end

resources :topics do
  resources :comments
end

resources :events do
  resources :comments
  resources :photos
end

Как будет, если вы будете использовать routing_concerns:

concern :commentable { resources :comments }
concern :photo_attachable { resources :photos }

resources :posts,  concerns: [:commentable, :photo_attachable]
resources :events, concerns: [:commentable, :photo_attachable]
resources :photos, concerns: [:commentable]
resources :topics, concerns: [:commentable]

Это в моем убогом примере используются только ресурсы, на практике в concern’ах могут быть использованы любые правила роутинга, например так:

concern :removable do
  post :move_to_trash, on: :member
end

routing_concerns позволяют очень сильно вычистить код roures.rb. Если вы работаете над крупным приложением с десятками контроллеров и сложными вложениями, то routing_concerns сильно упростит вашу работу и сделает код определения маршрутизации более понятным.

Установить routing_concerns можно добавив его в Gemfile вашего приложения и запустив команду bundle install.

Расширение routing_concern — это прототип того, что будет встроено в Rails 4.0. Как видите, Rails 4.0 готовит множество ништяков, помимо увеличения производительности, уменьшения потребления RAM и отказа от поддержки Ruby 1.8.

Tags: , , , , , ,

Responses

  1. Sergey says:

    июля 4, 2012 at 08:55 (#)

    Опечатка в примерах кода
    [language="ruby"]
    resources :events, concerns: [:commentsble, :photo_attachable]
    resources :photos, concerns: [:commentsble]
    [/language]

  2. dmon_s says:

    июля 4, 2012 at 13:32 (#)

    еба… Что за речь — ништяки, убогие примеры…

  3. admin says:

    июля 4, 2012 at 13:43 (#)

    Sergey, спасибо, поправил.

    dmon_s, я на роль Шекспира и не претендую.

  4. says:

    июля 4, 2012 at 14:20 (#)

    > еба… Что за речь — ништяки, убогие примеры…

    еба… Что за речь — еба…

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.