Ответ 1
item = Item.find(params[:id])
item["message"] = "it works"
render :json => item.to_json
Скажем, у меня есть этот короткий код:
item = Item.find(params[:id])
render :json => item.to_json
но мне нужно было вставить/направить дополнительную информацию на возвращаемый объект json, как мне это сделать?
Скажем, мне нужно вставить эту дополнительную информацию:
message : "it works"
Спасибо.
item = Item.find(params[:id])
item["message"] = "it works"
render :json => item.to_json
Метод to_json
принимает параметр параметра как параметр. Итак, что вы можете сделать, это сделать метод в своем классе объектов, который называется как сообщение, и вернуть его в качестве значения.
class Item < ActiveRecord::Base
def message
"it works"
end
end
render :json => item.to_json(:methods => :message)
Я нашел, что принятый ответ теперь выдает предупреждения об отказе в 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')
Если вы используете эшафот, например:
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.
Вы пробовали это?
item = Item.find(params[:id])
item <<{ :status => "Success" }
render :json => item.to_json