Подтвердить что ты не робот

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

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

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

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

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

message : "it works"

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

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

render :json => item.to_json(:methods => :message)

Ответ 3

Я нашел, что принятый ответ теперь выдает предупреждения об отказе в 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')

Ответ 4

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

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

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 output.

Ответ 5

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

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

render :json => item.to_json