默认情况下渲染JSON而不是HTML?

Tro*_*nic 39 rendering ruby-on-rails ruby-on-rails-3

我试着告诉rails 3.2默认情况下它应该呈现JSON,并完全像这样踢HTML:

respond_to :json    

def index
  @clients = Client.all
  respond_with @clients
end
Run Code Online (Sandbox Code Playgroud)

使用此语法,我必须添加.json到URL.我怎样才能实现它?

rog*_*iog 77

您可以修改routes.rb文件以指定默认格式

的routes.rb

resources :clients, defaults: {format: :json}
Run Code Online (Sandbox Code Playgroud)

这将修改整个的默认响应格式 clients_controller

  • 是否可以全局添加所有资源? (4认同)
  • 要向所有资源添加默认格式,请在`defaults`块中声明资源:`defaults format:'json'{resources:clients; 资源:产品}`. (4认同)
  • 这与新的rails版本兼容吗?我添加你提到的行,但它仍然呈现HTML.你能解释一下我怎么能这样做先生?谢谢 (4认同)
  • 这很棒,您也可以将它应用于名称空间(可能还有范围等).例如`namespace:api,{defaults:{format :: json}} do`.我目前在Rails 5上这样做 (3认同)

jdo*_*doe 10

如果您在索引操作中不需要RESTful响应,那么只需直接呈现您的xml响应:

def index
  render json: Client.all
end
Run Code Online (Sandbox Code Playgroud)


Mar*_*rom 7

如果要对两者使用相同的控制器操作,则此模式很有效.像往常一样制作网络版,使用:html作为默认格式.然后,将api塞在路径下并设置:json作为默认值.

Rails.application.routes.draw do

  resources :products

  scope "/api", defaults: {format: :json} do
    resources :products
  end

end
Run Code Online (Sandbox Code Playgroud)