response_to only format.js для всех типов пантомимы - PullRequest
4 голосов
/ 14 августа 2011

У меня есть контроллер, который response_to format.js, однако, большинство запросов предполагают, что старый format.html все еще существует и выдает исключение 404.Как мне перехватить все запросы MIME на контроллере и перенаправить их только в format.js?

Вот текущее действие контроллера

def search
  respond_to do |format|
    unless @search.nil?
      format.js { render :partial => '/search/search_form', :status => 200 }
    else
      format.js { render :partial => '/search/not_exist', :status => 500 }
    end
  end
end

Я пытаюсь сделать что-то подобноеЯ знаю, что это недействительно, просто для демонстрации).

def search
  respond_to(:html) do |format|
    unless @search.nil?
      format.js { render :partial => '/search/search_form', :status => 200 }
    else
      format.js { render :partial => '/search/not_exist', :status => 500 }
    end
  end
end

Ответы [ 2 ]

3 голосов
/ 14 августа 2011

Если все запросы должны быть только js, просто извлеките всю структуру response_to:

def search
  unless @search.nil?
    render :partial => '/search/search_form', :status => 200
  else
    render :partial => '/search/not_exist', :status => 422
  end
end

(примечание: измените на 422 необработанный объект, чтобы указать на семантическую проблему с представлением. 500 обычно резервируется дляошибки сервера, например, сбои, дампы стека и т. д.)

2 голосов
/ 14 августа 2011

Вы можете подключить постоянное перенаправление к вашему format.html и вернуть его обратно на контроллер, используя нужный вам формат. Это способ, которым вы перенаправили бы, скажем, канал RSS на канал атома или что-то, где у вас может быть несколько форматов ввода, но только один формат вывода

respond_to do |format|
...
format.js { do whatever }
...
format.html { redirect_to path_back_here(:format => :js) }

Замена path_back_here тем путем, который вы используете (search_path?)

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