как добавить данные в json в ruby ​​/ rails? - PullRequest
22 голосов
/ 30 июня 2010

Скажите, у меня есть этот короткий код:

item = Item.find(params[:id])
render :json => item.to_json

, но мне нужно было вставить / вставить дополнительную информацию в возвращенный объект json, как мне это сделать?

Допустим, мне нужно вставить эту дополнительную информацию:

message : "it works"

Спасибо.

Ответы [ 5 ]

27 голосов
/ 30 июня 2010
item = Item.find(params[:id])
item["message"] = "it works"
render :json => item.to_json
13 голосов
/ 30 июня 2010

Метод to_json принимает объект опции в качестве параметра . Поэтому вы можете создать метод в своем классе элементов, называемый сообщением, и вернуть ему текст, который вы хотите использовать в качестве значения.

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

render :json => item.to_json(:methods => :message)
6 голосов
/ 17 апреля 2014

Я нашел принятый ответ, теперь выдает предупреждения об устаревании в Rails 3.2.13.

ПРЕДУПРЕЖДЕНИЕ УСТАРЕВАНИЯ: вы пытаетесь создать атрибут message'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` и т. Д.

Предполагая, что вы не хотите помещать предложенный атрибут attr_writer в вашу модель, вы можете использовать метод as_json (возвращает хэш) для настройки объекта ответа JSON.

item = Item.find(params[:id])
render :json => item.as_json.merge(:message => 'it works')
1 голос
/ 14 июля 2017

Как добавить данные в json в ruby ​​/ rails 5

Если вы используете эшафот, например ::1003*

rails generate scaffold MyItem

в папке просмотра вы увидите следующие файлы:

app/view/my_item/_my_item.json.jbuilder
app/view/my_item/index.json.jbuilder

Итак, вы можете добавить пользовательские данные в вывод json для элемента, просто добавьте это:

json.extract! my_item, :id, :some_filed, :created_at, :updated_at
json.url my_item_url(my_item, format: :json)    

json.my_data my_function(my_item)

Как видите, можно изменить как вывод json одного элемента, так и вывод индекса json.

0 голосов
/ 30 июня 2010

Вы пробовали это?

item = Item.find(params[:id]) 
item <<{ :status => "Success" }

render :json => item.to_json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...