Aktywny rekord i plik: Jak napisać plik Json z moimi danymi?


Jak zapisać dane w zdarzeniu tabeli do pliku JSON?
Zobacz ten kod:
W modelu event.rb
class Event < ActiveRecord::Base
attr_accessible :name, :event_description, :start_at, :end_at, :status, :eventable_id
has_event_calendar
belongs_to :eventable, polymorphic: true
after_save :write_json
end
def write_json
Event.all.each do |event|
@eventJson = {
"id" => event.id,
"start" => event.start_at,
"end" => event.end_at,
"title" => event.name,
"body" => event.event_description,
"status" => event.status
} end
File.open("public/event.json","w") do |f|
f.write(@eventJson.to_json)
end end

W pliku
Json
znajduje się jeden wpis, ale w tabeli
event
jest ich wiele. Jak zapisać wszystkie rekordy z tabeli
event
do pliku event.json po zapisaniu rekordu?
public/event.json
{"id":35,"start":"2013-03-28T00:00:00Z","end":"2013-03-28T00:00:00Z","title":"1345edrewrewr","body":"123124","status":"Confirm"}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Problem polega na tym, że przypisujesz wartość do
@eventJson
w pętli, więc poprzednie wartości są tracone. Musisz użyć tablicy:
def write_json
events_json = []
Event.all.each do |event|
event_json = {
"id" => event.id,
"start" => event.start_at,
"end" => event.end_at,
"title" => event.name,
"body" => event.event_description,
"status" => event.status
}
events_json << event_json
end
File.open("public/event.json","w") do |f|
f.write(events_json.to_json)
end
end
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W takim przypadku możesz użyć
map
zamiast
każdego
- jest to znacznie czystsze.
Biorąc pod uwagę, że powiedziałeś, że metoda jest w modelu, tak by to wyglądało.
class Event < ActiveRecord::Base
... def self.write_json
record_json = self.all.map{ |record| { self.name => record.attributes } }.to_json
File.open("#{Rails.root}/#{(self.name.underscore)}.json", "w") do |f|
f.write record_json
end
end
end

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się