ruby-on-rails - 在 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 开始。
解决方案
您可以在 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
推荐阅读
- r - 如何使用非标准评估 NSE 来评估 data.table 上的参数?
- url - 撇号(有效字符)是百分比编码的 - 但只是有时
- java - 每周处理 S3 中的所有文件
- android - 检测软键盘是否打开的简单方法?
- three.js - 使用相机作为背景,同时在 A 帧中显示对象
- keras - 是否可以通过在 Keras 中将 model.compile 中的 loss_weights 设置为零来删除损失函数项?
- c++ - 关于 std::cout,为什么使用“extern”而不是“单例模式”
- mongodb - 为什么在 mongodb 文档中使用 slug 字段?
- angular - 无法解析配置“:classpath”的所有工件
- c - 在练习 4-11 的代码中找不到错误。Gettop Ungetetch