【问题标题】:Rails 5 in API mode only returning id, created_at, and updated_at of a recordAPI 模式下的 Rails 5 仅返回记录的 id、created_at 和 updated_at
【发布时间】: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


【解决方案1】:

这对我来说适用于显示和索引方法:

def show
  render json: @good_thing.to_json
end

对于索引:

def index
 # try forcing rendering
 @good_things = GoodThing.all
 render json: @good_things.to_json
end

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2012-05-15
    • 2016-06-13
    相关资源
    最近更新 更多