JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
Relationships on subclasses don't adhere to model name
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Ruby
- Sterne
- 2.3k
- Forks
- 546
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
A LoadError is thrown when trying to load a resource model with a namespaced custom model name that inherits from a abstract resource model that declares a relation.
Verified in versions 0.8.0.beta2 and 0.7.0
Modules:
module API
module V2
module Packages
class PackageResource < BaseResource
abstract
has_many :venues
end
end
end
end
module API
module V2
module Packages
class MeetingPackageResource < PackageResource
model_name 'Packages::MeetingPackage'
has_many :services, class_name: 'MeetingPackageService'
end
end
end
end
Path to meeting package module:
app/models/packages/meeting_package.rb
Error stack trace:
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:495:in `load_missing_constant': Unable to autoload constant MeetingPackage, expected /app/models/packages/meeting_package.rb to define it (LoadError)
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:184:in `const_missing'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:261:in `const_get'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:261:in `block in constantize'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:259:in `each'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:259:in `inject'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:259:in `constantize'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/inflector/methods.rb:304:in `safe_constantize'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/activesupport-4.2.7.1/lib/active_support/core_ext/string/inflections.rb:77:in `safe_constantiz
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:934:in `_model_class'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:974:in `block in _add_relationship'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:970:in `each'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:970:in `_add_relationship'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:411:in `block in inherited'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:408:in `each_value'
/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/jsonapi-resources-0.8.0.beta2/lib/jsonapi/resource.rb:408:in `inherited'
/app/resources/api/v2/packages/meeting_package_resource.rb:4:in `<module:Packages>'
/app/resources/api/v2/packages/meeting_package_resource.rb:3:in `<module:V2>'
/app/resources/api/v2/packages/meeting_package_resource.rb:2:in `<module:API>'
/app/resources/api/v2/packages/meeting_package_resource.rb:1:in `<top (required)>'
...
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Den im Issue beschriebenen Fall der vererbten Namespaces reproduzieren, beginnend in lib/jsonapi/resource.rb etwa bei _model_class, _add_relationship und inherited; mit app/resources/api/v2/packages/meeting_package_resource.rb und app/models/packages/meeting_package.rb vergleichen. Erledigt ist dies, wenn die Resource ohne den gemeldeten LoadError geladen wird und die geerbte venues-Beziehung gültig bleibt, mit einem Regressionstest, der den Fall abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rails, ruby
- Bereich
- api, backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100