с использованием ruby 1.9.2 и rails 3, я хотел бы ограничить поля, возвращаемые при доступе к записи в формате json или xml (разрешены только два формата).
этот очень полезный пост познакомил меня с response_with, и я где-то в Интернете обнаружил, что хороший способ скрыть некоторые поля - это переопределить as_json или to_xml для класса и установить: only or: кроме предельные поля.
пример:
class Widget < ActiveRecord::Base
def as_json(options={})
super(:except => [:created_at, :updated_at])
end
def to_xml(options={})
super(:except => [:created_at, :updated_at])
end
end
class WidgetsController < ApplicationController
respond_to :json, :xml
def index
respond_with(@widgets = Widgets.all)
end
def show
respond_with(@widget = Widget.find(params[:id]))
end
end
это именно то, что я ищу и работаю для json, но для xml "index" (GET /widgets.xml) он отвечает пустым массивом Widget. если я удаляю переопределение to_xml, я получаю ожидаемые результаты. я делаю что-то не так и / или почему переопределение Widgets.to_xml влияет на результат Array.to_xml?
я могу обойти это, используя
respond_with(@widgets = Widgets.all, :except => [:created_at, :updated_at])
но не чувствую, что это очень СУХОЙ метод.