ottenendo record attivi per visualizzare come un plist
-
13-09-2019 - |
Domanda
Sto cercando di ottenere un elenco di risultati record attivi da visualizzare come un plist per essere consumato dal iphone. Sto usando la gemma plist v 3.0.
Il mio modello è chiamato Post. E voglio POST.All (o qualsiasi array o messaggi) per visualizzare correttamente come Plist.
L'ho lavorare bene per un caso del messaggio: [ http://pastie.org/580902][1]
che è corretto, quello che mi aspetterei. Per ottenere che il comportamento che dovevo fare questo:
class Post < ActiveRecord::Base
def to_plist
attributes.to_plist
end
end
Tuttavia, quando faccio una POST.All, non posso convincerlo per visualizzare quello che voglio. Ecco cosa accade: http://pastie.org/580909
vengo smistamento. Voglio uscita più simile a questo: [ http://pastie.org/580914][2]
Suppongo che ho potuto solo scorrere il set di risultati e aggiungere le stringhe plist. Ma sembra brutto, sono sicuro che ci sia un modo più elegante per fare questo.
Sono arrugginito su Ruby in questo momento, quindi il modo elegante non è ovvio per me. Sembra come dovrei essere in grado di ignorare ActiveRecord e fare risultato-set che tirano indietro più di un record prendono il to_plist ActiveRecord :: Base e fare un altro implementazione to_plist. In rotaie, questo sarebbe andato a environment.rb, giusto?
Soluzione
Ho preso la via più facile:
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
Altri suggerimenti
Ho trovato questo sito cercando la stessa risposta. Penso che tu abbia il giusto approccio, anche se sono anche un novizio (on Rails) e non certo il modo giusto per farlo. Ho aggiunto questo per application_helper.rb. Sembra funzionare.
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
Secondo il progetto di README plist, è necessario implementare "to_plist_node", al contrario di "to_plist".
Si dovrebbe anche mixin Plist :: Emit alla classe ActiveRecord.