web-dev-qa-db-ja.com

Railsルート-リソースで使用可能な形式を制限する

JS形式でアクセスした場合にのみ利用できるようにしたい一連のリソースがあります。 Railsのルートリソースは、フォーマットと標準のHTMLを提供してくれます。 JS形式のルートのみを作成するように指定する方法はありますか?

27
Eric M.

フォーマットに関する制約を追加するだけです:

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

これらのルートをスコープでラップする必要があります。残念ながら、この場合、制約は期待どおりに機能しません。

これはそのようなブロックの例です...

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

詳細については、こちらをご覧ください: https://github.com/Rails/rails/issues/5548

63
koonse

上記の解決策はどれも私にはうまくいきませんでした。私はこの解決策を採用することになりました:

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 で見つかりました

5
user2031423

どうですか

# routes.rb

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

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

コントローラにはまったく届きません。 railsadventures から取得

0
Giugrilli

json#xhr?を使用できません)以外のいずれかが必要な場合は、以下のオプションを提供します

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

それが役に立てば幸い

0
Neodelf