ruby-on-rails - restful - routes ror
Rails Routes-Limitando los formatos disponibles para un recurso (6)
Tengo una serie de recursos que solo deseo que estén disponibles si se accede a través del formato JS. Los recursos de ruta de Rails me dan los formatos más el HTML estándar. ¿Hay alguna manera de especificar que solo se creen las rutas de formato JS?
Debes envolver esas rutas en un alcance. Desafortunadamente, las restricciones no funcionan como se esperaba en este caso.
Este es un ejemplo de tal bloque ...
scope :format => true, :constraints => { :format => ''json'' } do
get ''/bar'' => "bar#index_with_json"
end
Más información se puede encontrar aquí: https://github.com/rails/rails/issues/5548
Ninguna de las soluciones anteriores funcionó para mí. Acabé yendo con esta solución:
post "/test/suggestions", to: "test#suggestions", :constraints => -> (req) { req.xhr? }
Se encuentra en https://railsadventures.wordpress.com/2012/10/07/routing-only-ajax-requests-in-ror/#comment-375
Puede usar un before_filter
que genera un error de enrutamiento a menos que el formato de solicitud sea 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
Aplique este filtro de forma más quirúrgica con :only
:skip_before_filter
:except
, y :skip_before_filter
como se :skip_before_filter
en los rieles Guía del controlador de acción
Si necesita no solo uno u otro que no sea json
(¿no puede usar #xhr?
), Le ofrezco la siguiente opción
resource :offers, only: :show, format: true, constraints: { format: ''pdf'' }
Espero eso ayude
Simplemente agregas restricciones sobre el formato:
resources :photos, :constraints => {:format => /(js|json)/}
qué tal si
# routes.rb
class OnlyAjaxRequest
def matches?(request)
request.xhr?
end
end
post "/test/suggestions", to: "test#suggestions", :constraints => OnlyAjaxRequest.new
no llega al controlador en absoluto. Tomado de railsadventures