アクティブなレコードを取得することはplistのとして表示します

StackOverflow https://stackoverflow.com/questions/1264329

  •  13-09-2019
  •  | 
  •  

質問

私はiphoneによって消費されるためのplistのように表示するアクティブなレコード結果の一覧を取得しようとしています。私が3.0Vのplist宝石を使用しています。

私のモデルはポストと呼ばれています。そして、私はPost.all(または任意の配列や記事)がPLISTとして正しく表示したい。

私はそれが1つのポストインスタンスの細かい作業があります。 [ 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 ::基本to_plistを取り、別のto_plistの実装を行い、結果セットを作ることができるはずのように思えます。レールでは、これは正しい、environment.rbにして行くのでしょうか?

役に立ちましたか?

解決

私は簡単な方法を取った。

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

他のヒント

私は同じ答えを探して、このページを発見しました。私は、私も(on Railsの)初心者とそれを行うための正しい方法がわからないのだけれどもあなたは、右のアプローチを持っていると思います。私はapplication_helper.rbにこれを追加しました。動作しているようです。

require 'plist'
module ApplicationHelper

  class ActiveRecord::Base
    public

    include Plist::Emit

    def to_plist 
      self.attribute_names.inject({}) do |attrs, name|
        value = self.read_attribute(name)
        if !value.nil?
          attrs[name] = value
        end
        attrs
      end
    end
  end

end
"to_plist" とは対照的に、

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

あなたはまた、あなたのActiveRecordクラスにPLIST ::エミットをミックスインする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top