переопределить to_xml для ограничения возвращаемых полей - PullRequest
1 голос
/ 14 января 2011

с использованием 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])

но не чувствую, что это очень СУХОЙ метод.

1 Ответ

5 голосов
/ 29 июля 2011

В вашем методе to_xml сделайте следующее:

def to_xml(options={})
  options.merge!(:except => [:created_at, :updated_at])
  super(options)
end

Это должно исправить тебя.

...