Rails Routes - ограничение доступных форматов для ресурса - PullRequest
26 голосов
/ 09 сентября 2010

У меня есть ряд ресурсов, которые мне нужны, только если доступны через формат JS. Маршрутные ресурсы Rails дают мне форматы плюс стандартный HTML. Есть ли способ указать, что будут создаваться только маршруты в формате JS?

Ответы [ 6 ]

63 голосов
/ 03 августа 2012

Вы должны обернуть эти маршруты в область видимости. К сожалению, в этом случае ограничения не работают должным образом.

Это пример такого блока ...

scope :format => true, :constraints => { :format => 'json' } do
  get '/bar' => "bar#index_with_json"
end

Более подробную информацию можно найти здесь: https://github.com/rails/rails/issues/5548

16 голосов
/ 09 сентября 2010

Вы просто добавляете ограничения на формат:

resources :photos, :constraints => {:format => /(js|json)/}
5 голосов
/ 29 мая 2015

Ни одно из вышеперечисленных решений не помогло мне. Я закончил с этим решением:

post "/test/suggestions", to: "test#suggestions", :constraints => -> (req) { req.xhr? }

Найдено на https://railsadventures.wordpress.com/2012/10/07/routing-only-ajax-requests-in-ror/#comment-375

0 голосов
/ 05 сентября 2016

Если вам нужно не только одно или другое, чем json (не могу использовать #xhr?), я предлагаю вам вариант ниже

resource :offers, only: :show, format: true, constraints: { format: 'pdf' }

Надеюсь, это поможет

0 голосов
/ 14 ноября 2014

Как насчет

# routes.rb

class OnlyAjaxRequest
  def matches?(request)
    request.xhr?
  end
end

post "/test/suggestions", to: "test#suggestions", :constraints => OnlyAjaxRequest.new

Он вообще не попадает в контроллер.Взято из рельсовых приключений

0 голосов
/ 22 января 2012

Вы можете использовать before_filter, который вызывает ошибку маршрутизации, если формат запроса не равен MIME::JS.

app / controllers / application_controller.rb:

class ApplicationController < ActionController::Base
  before_filter :check_js

  private
    def check_js
      raise RoutingError.new('expected application/json') unless request.format == MIME::JS
    end
end

Применить этот фильтрбольше хирургическим путем с :only, :except и :skip_before_filter, как покрыто рельсами Руководство по действию

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