Herhangi bir yerde CommitteeList
veya CommitteeBase
adında bir sınıf tanımlanmadığınız için yayınınızdaki bazı önemli bilgileri kaçırıyor görünüyorsunuz. Onları tanımladığınızı ve bu kodu sağlamadığınızı varsayalım.
Karşılaştığınız sorun, Rails sınıflarını otomatik olarak nasıl yüklediği ile ilgili. Bu konuda more informationavailable elsewhere var, ancak sınıf adlarınızın, modül adlarınızın, dizin adlarınızın ve dosya adlarınızın hepsinin eşleştiğinden emin olmalısınız. CommitteeList
sınıfını kendi dosyasına taşıdığınızda çalışmasının nedeni, Rails sınıfı dinamik olarak bulabilmesidir.
Sağladığınız dayalı bazı tahmin işlerini yapmak zorunda kalmıştım ama şuna benzer bir şey istiyorum: Bu örnekte bazı şeyler değiştirildi ki
# app/api/proj/api/v2/entities/committee.rb
module PROJ::API::V2::Entities
class Committee < Grape::Entity; end
end
# app/api/proj/api/v2/entities/committee_base.rb
module PROJ::API::V2::Entities
class CommitteeBase; end
end
# app/api/proj/api/v2/entities/committee_with_subcommittee.rb
module PROJ::API::V2::Entities
class CommitteeWithSubcommittee < CommitteeBase; end
end
# app/api/proj/api/v2/entities/committee_list.rb
module PROJ::API::V2::Entities
class CommitteeList < CommitteeBase; end
end
Not; Sınıf adlarınız tekil (değil committees
) olmalıdır ve dosya adları bunları eşleştirmelidir, ancak bu değişikliği uygulamanızda başka sorunlara neden olabilir. Genellikle you should use singular ve çoğul değil.
Daha fazla ayrıntı için the Rails guide entry on constants and autoloading okumanızı öneririz.
Güncelleme: Raylar yalnızca adlandırılmış sınıf için bakacağı için
# app/api/proj/api/v2/entities/committee_base.rb
module PROJ::API::V2::Entities
class CommitteeBase < Grape::Entity;
expose :id
end
class CommitteeOffice < CommitteeBase;
expose :name
end
end
bu hatayı alıyorum: senin özünden olarak
Eğer aşağıdaki kodla present @committees, with: PROJ::API::V2::Entities::CommitteeOffice
çalıştırdığınızda Uninitialized constant PROJ::API::V2::Entities::CommitteeOffice
almak demek entities/committee_base.rb
dosyada PROJ::API::V2::Entities::CommitteeBase
. Varlık sınıflarınız için tek bir monolitik dosya kullanmayı tercih ederseniz, yukarıdaki dosyayı app/api/proj/api/v2/entities.rb
olarak adlandırmanız gerekir.
app/api/proj/api/v2/entities.rb
numaralı dosyaya ad vererek, "Bu dosya, Entities
modülünü ve tüm sınıflarını içerir." dosya yapısı ile
onun benim için iyi çalışıyor, ama ben böyle bir yapıya sahip olmadığını onun çalışmıyor https://gist.github.com/anbublacky/a6e66217b2fcdeb52fe580864beecf7f –
güncellenen özü özünden dayalı –
Güncelleme cevabı kontrol edin – anothermh