JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

Relationships on subclasses don't adhere to model name

Offen
#823 6 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

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

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Ö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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.