Подтвердить что ты не робот

Rails Routes - ограничение доступных форматов ресурса

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

4b9b3361

Ответ 1

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

resources :photos, :constraints => {:format => /(js|json)/}

Ответ 2

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

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

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

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

Ответ 4

как насчет

# routes.rb

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

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

он вообще не попадает в контроллер. Взято из railsadventures

Ответ 5

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

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

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

Ответ 6

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

приложение/контроллеры/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, как описано в рельсах Руководство по Action Controller