ruby1.9.2とrails3を使用して、レコードがjsonまたはxmlとしてアクセスされたときに返されるフィールドを制限したいと思います(2つの形式のみが許可されています)。
この非常に便利な投稿でresponse_withを紹介しました。オンラインのどこかで、一部のフィールドを包括的に許可/拒否するための良い方法は、クラスのas_jsonまたはto_xmlをオーバーライドし、フィールドを制限するために:onlyまたは:exceptを設定することです。
例:
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)の場合、空のウィジェット配列で応答します。to_xmlオーバーライドを削除すると、期待どおりの結果が得られます。何か間違ったことをしているのですか、および/またはWidgets.to_xmlオーバーライドがArray.to_xmlの結果に影響するのはなぜですか?
私はこれを使用して回避することができます
respond_with(@widgets = Widgets.all, :except => [:created_at, :updated_at])
しかし、それが非常に乾燥した方法だとは思わないでください。