在Rails 5.2中将不同的控制器方法渲染为JSON

时间:2018-05-14 21:22:20

标签: ruby-on-rails json api

我有一个资源在t = 0.1, X = 57.19989的{​​{1}}处完全呈现为JSON。

将返回所有localhost:3000/gins.json。但是,我想要一个仅返回最后4个gins的JSON响应,以便在其他地方使用。在控制器中我也有:

@gins = Gin.order(name: :desc)

以上内容适用于带gins的index.html.erb视图,但如何获取JSON呢?我已尝试@latestgins = Gin.order("created_at DESC").first(4)但导航到<%= @latestgins.name %>,当然会出现路由错误。

我怀疑我是以完全错误的方式攻击它,但只是刚开始使用Rails API。

1 个答案:

答案 0 :(得分:0)

您可以在索引方法中添加对格式json的响应:

def index
  @gins = Gin.order(name: :desc)
  @latestgins = Gin.order("created_at DESC").first(4)
  respond_to do |format|
    format.html
    format.json { render json: @latestgins }
  end
end

您的@latestgins现已在此处提供:localhost:3000/gins.json

修改

如果您想要自定义路线来显示您的数据,只需将其添加到您的路线中:

defaults format: :json do
  get 'last4gins', to: "gins#index"
end

最后4个条目的数据位于http://localhost:3000/last4gins.jsonhttp://localhost:3000/last4ginslocalhost:3000/gins.json

如果您希望保持gins索引路由清洁,您还可以创建自定义方法并从索引中删除@latestgins

# routes
get 'last4gins', to: "gins#last4gins"

#controller
def index
  @gins = Gin.order(name: :desc)
end

def last4gins
  @latestgins = Gin.order("created_at DESC").first(4)
  render json: @latestgins
end

现在/gins.json

的数据已不再可用