如何在ruby/rails中将数据附加到json?

Dav*_*vid 22 ruby json ruby-on-rails

说我有这个简短的代码:

item = Item.find(params[:id])
render :json => item.to_json
Run Code Online (Sandbox Code Playgroud)

但我需要插入/推送额外的信息到返回的json对象,我该怎么做?

让我们说我需要插入这个额外的信息:

message : "it works"
Run Code Online (Sandbox Code Playgroud)

谢谢.

Dog*_*ert 27

item = Item.find(params[:id])
item["message"] = "it works"
render :json => item.to_json
Run Code Online (Sandbox Code Playgroud)

  • 这行不会抛出错误:item ["message"] ="it works".据我所知,你无法在ruby中动态添加属性(你可以在js中做这样的事情). (5认同)
  • 我尝试但我得到错误`不能写未知属性`.但是下面的解决对我有用. (3认同)
  • ActiveRecord是否返回哈希? (2认同)

NM.*_*NM. 13

to_json方法将选项对象作为参数.所以你可以做的是在你的item类中创建一个名为message的方法,让它返回你想要的文本作为它的值.

class Item  < ActiveRecord::Base
 def message
  "it works"
 end
end

render :json => item.to_json(:methods => :message)
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 6

我发现接受的答案现在抛出了Rails 3.2.13中的弃用警告.

弃用警告:您正在尝试创建属性message'. Writing arbitrary attributes on a model is deprecated. Please just useattr_writer`等.

假设您不想将建议的attr_writer放在模型中,可以使用该as_json方法(返回Hash)来调整JSON响应对象.

item = Item.find(params[:id])
render :json => item.as_json.merge(:message => 'it works')
Run Code Online (Sandbox Code Playgroud)

  • ActiveModel的as_json方法[返回哈希](http://api.rubyonrails.org/v3.2.13/classes/ActiveModel/Serializers/JSON.html#method-i-as_json). (2认同)