Фильтр json render в Rails
Каков наилучший способ, если я хотел бы только возвращать: id и: поля имени в JSON
До сих пор я:
format.json { render :json => @contacts.map(&:attributes) , :only => ["id"]}
Но атрибут "name" не работает в разделе: only, поскольку он не является столбцом в базе данных (он определен в модели как имя и фамилия)
Спасибо!
Ответы
Ответ 1
Вы можете передать :methods
в to_json/as_json
format.json do
render :json => @contacts.map { |contact| contact.as_json(:only => :id, :methods => :name) }
end
В качестве альтернативы вы можете просто создать хэш вручную
format.json do
render :json => @contacts.map { |contact| {:id => contact.id, :name => contact.name} }
end
Смотрите: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json
Ответ 2
Rails 3 поддерживает следующие параметры фильтра. так же просто, как
respond_to do |format|
format.json { render json: @contacts, :only => [:id, :name] }
end