加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4 – 从渲染中删除“created_at”和“up

发布时间:2020-12-17 03:49:14 所属栏目:百科 来源:网络整理
导读:当我想从一个资源中删除这些数据时,我会: @teams = Team.allrender json: @teams,:except = [:created_at,:updated_at], 我怀疑的是,当我有许多像这样的包括: @teams = Team.allrender json: @teams,:include = [:stadiums,:scores,:links,:rounds] 如何从
当我想从一个资源中删除这些数据时,我会:

@teams = Team.all

render json: @teams,:except => [:created_at,:updated_at],

我怀疑的是,当我有许多像这样的包括:

@teams = Team.all

render json: @teams,:include => [:stadiums,:scores,:links,:rounds]

如何从所有这些中删除?

解决方法

更正:你可以做类似的事情

render json: @teams.to_json(:except => [:created_at,:include => { :stadiums => { :except => [:created_at,:updated_at]},... })

没有迭代相关模型,获取属性哈希并选择所需属性,没有简单的方法可以做到这一点.

这些用例通常使用json模板DSL(如jbuilder或rabl)优雅地解决.

使用jbuilder来说明这一点:

Jbuilder.encode do |json|
  json.array! @teams do |team|
    json.name team.name
    json.stadiums team.stadiums do |stadium|
      json.name stadium.name
      # Other relevant attributes from stadium
    end
    # Likewise for scores,links,rounds
  end
end

哪个会产生输出:

[{
  name: "someteamname",stadiums: {
    name: "stadiumname"
  },...
},{...},...]

如果您发现这个用例过于冗长,正如@liamneesonsarmsauce在评论中指出的那样另一个解决方案就是使用ActiveModel Serializers

使用此方法,您可以为每个模型指定一个序列化程序类,列出允许的属性,这些属性将成为json响应的一部分.例如

class TeamSerializer  < ActiveModel::Serializer
  attributes :id,:name # Whitelisted attributes

  has_many :stadiums
  has_many :scores
  has_many :links
  has_many :rounds
end

您也可以为关联模型定义类似的序列化程序.

由于关联是以rails开发人员已经熟悉的方式无缝处理的,除非您需要对生成的json响应进行大量自定义,否则这是一种更简洁的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读