【发布时间】:2016-09-06 00:39:57
【问题描述】:
我在 API 模式下使用 Rails 5。在向我的服务器查询资源时,我只收到资源的 ID、created_at 和 updated_at 属性。
当我直接从 Rails 控制台查询时,一切似乎都很好:
>> GoodThing.find 2
GoodThing Load (0.5ms) SELECT "good_things".* FROM "good_things" WHERE "good_things"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]]
#<GoodThing:0x007fa62e4797b8> {
:id => 2,
:content => "hello there",
:date => Fri, 02 Sep 2016,
:user_id => 1,
:created_at => Fri, 02 Sep 2016 17:30:17 UTC +00:00,
:updated_at => Fri, 02 Sep 2016 17:30:17 UTC +00:00
}
但是当我到达端点 localhost:3000/good_things/2.json 时,我得到了
{
"id": 2,
"created_at": "2016-09-02T17:30:17.335Z",
"updated_at": "2016-09-02T17:30:17.335Z"
}
我的控制器:
class GoodThingsController < ApplicationController
before_action :set_good_thing, only: [:show, :update, :destroy]
# GET /good_things
# GET /good_things.json
def index
@good_things = GoodThing.all
end
# GET /good_things/1
# GET /good_things/1.json
def show
# try forcing rendering
render json: @good_thing
end
# POST /good_things
# POST /good_things.json
def create
@good_thing = GoodThing.new(good_thing_params)
if @good_thing.save
render :show, status: :created, location: @good_thing
else
render json: @good_thing.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /good_things/1
# PATCH/PUT /good_things/1.json
def update
if @good_thing.update(good_thing_params)
render :show, status: :ok, location: @good_thing
else
render json: @good_thing.errors, status: :unprocessable_entity
end
end
# DELETE /good_things/1
# DELETE /good_things/1.json
def destroy
@good_thing.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
def set_good_thing
@good_thing = GoodThing.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def good_thing_params
params.fetch(:good_thing, {})
end
end
【问题讨论】:
-
我想补充一下,我尝试了this post中提到的方法,但没有奏效,反正也没有很好的解决方案。
-
看来
render plain: @good_thing.to_json, status: :ok, content_type: 'application/json'可行,但为什么呢?
标签: ruby-on-rails-5 rails-api jsonbuilder