RoR - Model.all,但没有created_at和updated_at字段
我是Ruby的新手,所以这个问题对你来说可能看起来很愚蠢,是的。但仍... 我有一个模型组,当我运行这个RoR - Model.all,但没有created_at和updated_at字段
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:
发现在原来的问题一个很好的解决方案,我不小心做了一个重复的。继续阅读吧
每当您向视图提供对象时,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])
'as_json'已经接受'only:[:some,:field]'和'except:[:other,:field]'(https://apidock.com/rails/ActiveResource/Base/as_json)选项 – MrYoshiji
*认为@MrYoshiji说的(在另一个评论线程中)是使用模型中的''as_json''方法*随时*排除'created_at'和'updated_at' * *'Group'模型是转换为json。这是通过你的更新来解决的(使用'to_json'调用的参数)。但是,您现在在控制器中具有与我提议的方法相同数量的业务逻辑(比如它)。 – jvillian
@jvillian我确认。您的(cyczanfar's)解决方案通过整个应用程序的“Group#as_json”调用来限制可用数据。在不同的*上下文*中,像'/ admin/groups.json',你可能需要那些'updated_at'和'created_at'的值 – MrYoshiji
Rails的配备的JBuilder默认情况下生成json响应。你只需要找到group/index.json.jbuilder
并删除里面的created_at
和updated_at
。并改变你的控制器动作:
def index
@group = Group.all
end
,或者如果你需要支持其他格式:
def index
@group = Group.all
respond_to do |format|
format.json
end
end
你可以看到你没有指定任何的Rails会默认使用您的JBuilder文件。
你可以简单地做:
class GroupsController < ApplicationController
prepend SimpleCommand
...
def index
render json: Group.pluck(:id, :name, :has_subgroups)
end
end
它可能无所谓你,但我觉得这方法是更快,因为它不会实例所有Group
对象。
@Cyzanfar哦,谢谢。我试过几次这样的谷歌类似的东西,但从来没有遇到与Yosh联系的答案。我用那里的答案来解决我的问题。 – Volkeee