1

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])

しかし、それが非常に乾燥した方法だとは思わないでください。

4

1 に答える 1