我有一个使用以下方法的模型:
class Book < ActiveRecord:Base
def as_json(options = nil)
if options.nil?
super(only: [:id, :title, :status, :description])
else
super(options)
end
end
end
我还有一个看起来像的控制器:
class BookController < ApplicationController
def search
books = Book.where(title: params[:keyword])
render json: books.as_json(only: [:id, :title])
end
end
是否可以使用第三方应用程序所需的其他名称覆盖:标题符号?我想将:title更改为:value仅用于通过此JSON调用推送。
我尝试过几种不同的事情来覆盖(不在as_json中编写特殊规则,因为这是从应用程序中的几个不同位置调用的)。
提前致谢!
答案 0 :(得分:0)
所以,这就是我最终使用的解决方案:
在.tap调用之前的JSON:
[{"id"=>4, "book_code"=>"11-292454", "title"=>"How the world turns."}]
对于单个JSON对象:
json = json.tap { |hash| hash["value"] = hash.delete "title" }
对于JSON数组:
json = json.each do |j|
j.tap { |hash| hash["value"] = hash.delete "title" }
end
.tap调用之后的JSON:
[{"id"=>4, "book_code"=>"11-292454", "value"=>"How the world turns."}]
不知道它是否正确,但似乎对我有用。