首页 > 解决方案 > 在 Rails 5.2 中将不同的控制器方法呈现为 JSON

问题描述

localhost:3000/gins.json我有一个资源在from处呈现为 JSON 非常好@gins = Gin.order(name: :desc)

这将返回 ALL gins。但是,我想要一个仅返回最后 4 个杜松子酒的 JSON 响应,以便在其他地方使用。在控制器中,我还有:

@latestgins = Gin.order("created_at DESC").first(4)

以上将在 index.html.erb 视图中使用<%= @latestgins.name %>,但我如何获得 JSON 呢?我已经尝试过render json: @latestgins,但导航到localhost:3000/latestings.json,当然会出现路由错误。

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

标签: ruby-on-railsjsonapi

解决方案


您可以在 index 方法中添加对格式 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.json, 在http://localhost:3000/last4gins但也可在localhost: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


推荐阅读