Ein Modell (FirstModel) in meiner Rails-App hat eine has_many-Beziehung zu einem anderen Modell (Item).Verwenden von Jbuilder in Rails zum Erstellen eines Arrays aus Objekten mit unterschiedlichen Klassen
class FirstModel < ActiveRecord::Base
has_many :items, :dependent => :destroy
def item_array
a = []
self.items.each do |item|
a.push(item.item_thing)
end
a
end
end
Element selbst gehört: item_thing durch eine polymorphe Assoziation. Eine Methode auf FirstModel gibt ein Array von "items" zurück, nicht das join-Modell-Objekt (das der Klasse Item angehört), sondern das item_thing jedes Item-Objekts und daher ein Array von Objekten verschiedener Klassen (in der rails-Konsole eingecheckt). und die Methode gibt das Array just fine)
class Item < ActiveRecord::Base
belongs_to :item_thing, :polymorphic => true
end
In meinem show.json.jbuilder für FirstModel, möchte ich, dass die Reihe von „items“ nehmen und verschiedene Vorlagen verwenden, basierend auf welcher Klasse das Objekt gehört. Der folgende Dateipfad ist "Ansichten/api/Artikel/show.jbuilder"
json.extract! @item, :name
json.items @item.item_array do |item|
if item.class == 'Book'
json.partial! 'api/books/show', item
end
if item.class == 'Car'
json.partial! 'api/cars/show', item
end
end
Das Auto und Buch-Vorlage Wege sind "Ansichten/api/Autos/show.json.jbuilder" und „Ansichten/api/Bücher /show.json.jbuilder.
Wenn ich den JSON von der obigen Vorlage bekomme, ist der Name des FirstModel-Objekts sichtbar, das Elementarray ist leer, während ich versuche, ein Array von Hashes für jedes durchgerenderte Element zu erhalten ihre jeweilige Vorlage.
Vielen Dank für ihre Hilfe!