3

iphone で消費される plist として表示するアクティブなレコード結果のリストを取得しようとしています。plist gem v 3.0 を使用しています。

私のモデルはポストと呼ばれています。そして、Post.all (または任意の配列または Posts) を Plist として正しく表示する必要があります。

1 つの Post インスタンスで問題なく動作しています: [ http://pastie.org/580902][1]

それは正しいです、私が期待することです。その動作を取得するには、次のことを行う必要がありました。

class Post < ActiveRecord::Base
   def to_plist
     attributes.to_plist
   end
end

しかし、Post.all を実行すると、必要なものが表示されません。これが何が起こるかです: http://pastie.org/580909

私はマーシャリングを取得します。このような出力がもっと欲しい: [ http://pastie.org/580914][2]

結果セットを反復処理して、plist 文字列を追加するだけでよいと思います。しかし、醜いようです。これを行うためのよりエレガントな方法があると確信しています。

私は今Rubyに慣れていないので、エレガントな方法は私には明らかではありません. ActiveRecord をオーバーライドして、複数のレコードを取得する結果セットを ActiveRecord::Base to_plist に取り、別の to_plist 実装を作成できるようにする必要があるようです。Railsでは、これはenvironment.rbに入りますよね?

4

3 に答える 3

0

plist プロジェクトの README によると、「to_plist」ではなく「to_plist_node」を実装する必要があります。

Plist::Emit も ActiveRecord クラスに mixin する必要があります。

于 2011-08-10T15:14:01.817 に答える
0

私は簡単な方法を取りました:

private

  # pass in posts resultset from finds
  def posts_to_plist(posts)
    plist_array = []
    posts.each do |post|
      plist_array << post.attributes
    end
    plist_array.to_plist
  end

public

  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.all
    #@posts = [{:a=>"blah"}, {:b=>"blah2"}]

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => posts_to_plist(@posts) }
    end
  end
于 2009-08-12T15:58:25.280 に答える