アクティブなレコードを取得することはplistのとして表示します
-
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
のplistプロジェクトのREADMEによると、あなたは、 "to_plist_node" を実装する必要があります。
あなたはまた、あなたのActiveRecordクラスにPLIST ::エミットをミックスインする必要があります。