{"id":2761,"date":"2015-06-28T22:13:25","date_gmt":"2015-06-28T20:13:25","guid":{"rendered":"https:\/\/sgaul.de\/?p=2761"},"modified":"2015-06-28T22:13:25","modified_gmt":"2015-06-28T20:13:25","slug":"require-und-rails","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2015\/06\/28\/require-und-rails\/","title":{"rendered":"Require und Rails"},"content":{"rendered":"

Rails‘ Autoloading macht einen guten Job, so dass man Abh\u00e4ngigkeiten\u00a0selten per Hand aufl\u00f6sen muss. Will man aber etwa eine bestehende Modelklasse aus einer Engine \u00f6ffnen um eigenen\u00a0Code zu erg\u00e4nzen, so muss das Original notwendigerweise vorhanden sein:<\/p>\n

# userengine\/app\/models\/user\r\n\r\nclass User < ActiveRecord::Base\r\n  belongs_to :user_group\r\nend<\/pre>\n
# railsapp\/app\/models\/user\r\n\r\nrequire User::Engine.root.join('app', 'models', 'user')\r\n\r\nclass User < ActiveRecord::Base\r\n  belongs_to :user_group\r\nend<\/pre>\n

<\/p>\n

Dies wird\u00a0vor allem w\u00e4hrend der Entwicklung zu Problemen f\u00fchren, da Rails bei einer \u00c4nderung die Klasse zur\u00fccksetzt und nur\u00a0die ge\u00e4nderte\u00a0Datei neu l\u00e4dt. Die andere Klassendefinition\u00a0geht verloren, was zu merkw\u00fcrdigen Ergebnissen f\u00fchren kann.<\/p>\n

Die L\u00f6sung f\u00fcr\u00a0Rails ist ein spezielles Require, welches sich mit\u00a0Autoloading vertr\u00e4gt:<\/p>\n

# railsapp\/app\/models\/user\r\n\r\nrequire_dependency User::Engine.root.join('app', 'models', 'user')\r\n# ...<\/pre>\n

Im Rails-Guide wird Single-Table-Inheritance als weiteres Einsatzgebiet genannt<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"

Rails‘ Autoloading macht einen guten Job, so dass man Abh\u00e4ngigkeiten\u00a0selten per Hand aufl\u00f6sen muss. Will man aber etwa eine bestehende Modelklasse aus einer Engine \u00f6ffnen um eigenen\u00a0Code zu erg\u00e4nzen, so muss das Original notwendigerweise vorhanden sein: # userengine\/app\/models\/user class User < ActiveRecord::Base belongs_to :user_group end # railsapp\/app\/models\/user require User::Engine.root.join(‚app‘, ‚models‘, ‚user‘) class User < ActiveRecord::Base… Require und Rails<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[579,527,553,552],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2761"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=2761"}],"version-history":[{"count":1,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2761\/revisions"}],"predecessor-version":[{"id":2762,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2761\/revisions\/2762"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=2761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=2761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=2761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}