【问题标题】:Rails how to change attribute name when rendering json?Rails在渲染json时如何更改属性名称?
【发布时间】:2012-01-21 06:51:15
【问题描述】:

在我的控制器中,我有:

@pakkes = Pakke.where("navn like ?", "%#{params[:q]}%")

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @pakkes }
  format.json { render :json => @pakkes.map(&:attributes) }
end

如何在渲染 JSON 时将属性 navn 更改为 name?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    你可以用Pakke中的单行方法做到这一点:

    def as_json(*args)
        super.tap { |hash| hash["name"] = hash.delete "navn" }
    end
    

    调用super 会像往常一样生成 json 哈希,然后在它返回之前,你会突然介入并更改“navn”条目的键。

    【讨论】:

    • 这是一个优雅而超酷的解决方案!谢谢你:)
    • 很好的解决方案,对于那些与旧版 IE 冲突的受保护属性很方便...
    • 没有删除我的列,也没有在哈希中添加一个。虽然它看起来不错,但它不工作。
    【解决方案2】:

    覆盖as_json 方法。 to_json 使用它来生成输出。您可以执行以下操作:

    def as_json options={}
     {
       name: navn,
       .... # other attributes you want to add to json
     }
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多