Etkin bir model kaynağında serileştirilmiş ilişkilendirmelerin düzeyini sınırlamakla ilgili bir sorun yaşıyorum. ÖrneğinSınırlı Dernekler Active Model Seri hale getiricide Cascade
:
bir oyun, ben Ekibi için JSON aldığınızda birçok Oyuncular
class GameSerializer < ActiveModel::Serializer
attributes :id
has_many :teams
end
class TeamSerializer < ActiveModel::Serializer
attributes :id
has_many :players
end
class PlayerSerializer < ActiveModel::Serializer
attributes :id, :name
end
olan birçok Takımlar vardır istediğiniz gibi bir alt dizide tüm oyuncuları kapsar.
Oyun için JSON'u aldığımda, bir alt dizideki tüm Takımları, mükemmel, ancak her Takım için tüm oyuncuları içerir. Beklenen davranış bu, ancak derneklerin seviyesini sınırlamak mümkün mü? Oyun sadece Oyuncular olmadan serileştirilmiş Takımları iade etsin mi? Sonra
class ShortTeamSerializer < ActiveModel::Serializer
attributes :id
end
:
class GameSerializer < ActiveModel::Serializer
attributes :id
has_many :teams, serializer: ShortTeamSerializer
end
Ya Tanımlayabileceğiniz include_teams?
GameSerializer
bir:
class GameSerializer < ActiveModel::Serializer
attributes :id
has_many :teams
def include_teams?
@options[:include_teams]
end
end
'object.association (: comments) .loaded?' Bu tam olarak aradığım şey, teşekkürler! Bu yöntemin kabul edilen cevaptan daha temiz olduğunu düşünüyorum. Active_model_serializer dokümanlarından, n + 1 sorgularını önlemek için bir birleştirici veya denetleyicide bulunan ilişkilendirmeleri eklemesi önerilir. Nişanlandığım yerde, bir ilişkilendiricinin yüklenip yüklenmediğini ya da atlamak için diziselleştiricideki yerini aldım. Belgelerden: "En iyi şekilde veri yüklendiğinden emin olarak n + 1 sorgularını engellemeye çalışın; örn. ActiveRecord kullanıyorsanız, sorgu içeriklerini veya gerekiyorsa katılmayı isteyebilirsiniz" – Mark
Nerede aramak zorundayım include_comments? yöntem? – Kaspar