RoR - два формата response_to, использующие один и тот же блок? - PullRequest
13 голосов
/ 23 августа 2011

Есть ли что-то вроде:

respond_to do |format|

  format.html || format.xml do
    #big chunk of code
  end

end

Я бы хотел сделать это ради СУХОГО.

Ответы [ 3 ]

37 голосов
/ 20 сентября 2013

Respond_to фактически позволяет вам указать свой общий блок для различных форматов, используя любой:

format.any(:js, :json) { #your_block }
4 голосов
/ 23 августа 2011

Вы можете использовать такой формат:

class PeopleController < ApplicationController
  respond_to :html, :xml, :js

  def index
    @people = Person.find(:all)
    respond_with(@people) do |format|
        format.html
        format.xml
        format.js { @people.custom_code_here }
    end
  end
end

Что бы достичь того, что вы ищете, если у вас более сложная ситуация, дайте мне знать. См. Эту статью о методе reply_with для получения дополнительной помощи.

1 голос
/ 23 августа 2011

когда вы

respond_to do |format|
  format.html do
    #block
  end
  format.xml do
    #block
  end
end

или

respond_to do |format|
  format.html { #block }
  format.xml { #block }
end

вы используете рубиновые блоки , которые оцениваются как ProcsПоэтому вы могли бы сделать

respond_to do |format|
  bcoc = Proc.new do
    # your big chunk of code here
  end
  format.html bcoc
  format.xml bcoc
end

, но, возможно, вы могли бы перенести часть этой логики в вашу структуру данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...