3

まず、私は Rails を使用していません。このプロジェクトでは Active Record で Sinatra を使用しています。

Model クラスで to_json または as_json をオーバーライドして、いくつかの「デフォルト」オプションを定義できるようにしたいと考えています。たとえば、次のものがあります。

class Vendor < ActiveRecord::Base
  def to_json(options = {})
    if options.empty?
      super :only => [:id, :name]
    else
      super options
    end
  end
end

Vendor には、id と name 以外の属性があります。私のルートでは、次のようなものがあります。

@vendors = Vendor.where({})
@vendors.to_json

これ@vendorsは配列ベンダー オブジェクトです (当然のことです)。ただし、返された json はto_jsonメソッドを呼び出しておらず、すべてのモデル属性を返しています。

私は実際に変更された sinatra-rest gem (http://github.com/mikeycgto/sinatra-rest) を使用しているため、ルートを変更するオプションは実際にはありません。

この機能を実現する方法についてのアイデアはありますか? 私はsinatra-rest gemで次のようなことをすることができましたが、これはばかげているようです:

@PLURAL.collect! { |obj| obj.to_json }
4

2 に答える 2

5

serializable_hashinteadをオーバーライドしてみてください。

def serializable_hash(options = nil)
  { :id => id, :name => name }
end

詳細はこちら

于 2010-10-22T19:08:08.793 に答える
4

to_json の代わりに as_json をオーバーライドすると、配列が JSON に変換される前に、配列内の各要素が as_json でフォーマットされます。

アクセス可能な属性のみを公開するために、次を使用しています。

def as_json(options = {})
    options[:only] ||= self.class.accessible_attributes.to_a
    super(options)
end
于 2013-02-14T19:33:09.867 に答える