RoR - Model.all,但没有created_at和updated_at字段

时间:2017-10-06 19:22:41

标签: ruby-on-rails ruby model

我是Ruby的新手,所以这个问题对你来说可能看起来很愚蠢,是的。但还是...... 我有一个模型组,当我运行这个

class GroupsController < ApplicationController
  prepend SimpleCommand
    ...
    def index
        @group = Group.all
        render json: @group
    end
    ...
    # some other stuff

...然后我得到一个像这样的数组响应:

[
  {
    "id": 1020,
    "name": "НІ-16-1",
    "has_subgroups": true,
    "created_at": "2017-09-29T10:14:08.000Z",
    "updated_at": "2017-09-29T10:14:08.000Z"
  }
...
]

但我不想拥有那两个最后的字段,所以我的回答是 如何摆脱响应中的“created_at”和“updated_at”字段?

UPD:

在原始问题中找到了一个很好的解决方案我不小心复制了。来吧看看吧

3 个答案:

答案 0 :(得分:1)

每次将对象提供给视图时,JSON Rails会在内部调用函数as_json。摆脱这两个字段的一种方法是在Group模型中覆盖该函数:

 class Group < ActiveRecord::Base
      def as_json(options={})
        { id: id,
          name: name,
          has_subgroups: has_subgroups
        }
      end
  end

或者@MrYoshiji建议你可以像这样过滤掉它们:

render json: @groups.to_json(except: [:created_at, :updated_at])

答案 1 :(得分:1)

Rails默认带有jbuilder来生成json响应。您只需找到group/index.json.jbuilder并删除里面的created_atupdated_at即可。并将控制器操作更改为:

def index
    @group = Group.all
end

或者如果您需要支持其他格式:

def index
    @group = Group.all
    respond_to do |format|
      format.json
    end
end

您可以看到您不必指定任何内容,因为Rails默认会使用您的jbuilder文件。

答案 2 :(得分:1)

你可以这样做:

class GroupsController < ApplicationController
  prepend SimpleCommand
    ...
  def index
     render json: Group.pluck(:id, :name, :has_subgroups)
  end
end

对你来说可能无关紧要,但我认为这种方法更快,因为它没有实例化所有Group个对象。