rails - DRY respond_to with repeated actions

controller, dry, ruby-on-rails

Solution

Have you tried format.any(:html, :mobile, :xml)?

Example (added 2011/9/14)

From the rails doc

Respond to also allows you to specify a common block for different formats by using any:

def index
  @people = Person.all

  respond_to do |format|
    format.html
    format.any(:xml, :json) { render request.format.to_sym => @people }
  end
end

In the example above, if the format is xml, it will render:

render :xml => @people

Or if the format is json:

render :json => @people

Problem

In one of my rails controller, I must respond to several types of formats, so I use the typical `respond_to` chain: ``` respond_to do |format| format.html { ... } format.mobile { ... } format.jpg { ... } format.xml { ... } format.js { ... } end ``` Usually that the `{ ... }` part is repeated on several formats. What is the best way to stay DRY on this case? On an scenario in which `html`, `mobile` and `xml` have a "repeated" action, I'd like to do something like this: ``` respond_to do |format| format[:html, :mobile, :xml] { ... } format.jpg { ... } format.js { ... } end ``` Thanks a lot.

Original source