JS形式でアクセスした場合にのみ利用できるようにしたい一連のリソースがあります。 Railsのルートリソースは、フォーマットと標準のHTMLを提供してくれます。 JS形式のルートのみを作成するように指定する方法はありますか?
フォーマットに関する制約を追加するだけです:
resources :photos, :constraints => {:format => /(js|json)/}
これらのルートをスコープでラップする必要があります。残念ながら、この場合、制約は期待どおりに機能しません。
これはそのようなブロックの例です...
scope :format => true, :constraints => { :format => 'json' } do
get '/bar' => "bar#index_with_json"
end
詳細については、こちらをご覧ください: https://github.com/Rails/rails/issues/5548
上記の解決策はどれも私にはうまくいきませんでした。私はこの解決策を採用することになりました:
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 で見つかりました
どうですか
# routes.rb
class OnlyAjaxRequest
def matches?(request)
request.xhr?
end
end
post "/test/suggestions", to: "test#suggestions", :constraints => OnlyAjaxRequest.new
コントローラにはまったく届きません。 railsadventures から取得
json
(#xhr?
を使用できません)以外のいずれかが必要な場合は、以下のオプションを提供します
resource :offers, only: :show, format: true, constraints: { format: 'pdf' }
それが役に立てば幸い