{"id":2693,"date":"2014-09-24T22:26:35","date_gmt":"2014-09-24T20:26:35","guid":{"rendered":"https:\/\/sgaul.de\/?p=2693"},"modified":"2014-09-24T22:27:05","modified_gmt":"2014-09-24T20:27:05","slug":"methoden-fuer-active-record-relationen-definieren","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2014\/09\/24\/methoden-fuer-active-record-relationen-definieren\/","title":{"rendered":"Methoden f\u00fcr Active-Record-Relationen definieren"},"content":{"rendered":"

Ein Scope in Active Record ist nichts anderes als\u00a0syntaktischer Zucker f\u00fcr das Definieren einer Klassenmethode. Die folgenden User-Models f\u00fchren zum selben Ergebnis:<\/p>\n

class User < ActiveRecord::Base\r\n  scope :admins, -> { where(role: \"admin\") }\r\nend<\/pre>\n
class User < ActiveRecord::Base\r\n  def self.admins\r\n    where(role: \"admin\")\r\n  end\r\nend<\/pre>\n

Da man Scopes verketten kann dr\u00e4ngt sich der (berechtigte) Verdacht auf, dass dies mit jeder Form von Klassenmethode m\u00f6glich ist.<\/p>\n

<\/p>\n

class User < ActiveRecord::Base\r\n\r\n  scope :admins, -> { where(role: \"admin\") }\r\n\r\n  def self.names\r\n    pluck(:name)\r\n  end\r\n\r\nend<\/pre>\n

Dies funktioniert. Man kann auf diese Weise jede zusammengestellte Relation beliebig verarbeiten. Obiges Beispiel lie\u00dfe sich etwa folgenderma\u00dfen anwenden:<\/p>\n

User.create(name: \"Klaus\", role: \"admin\")\r\nUser.create(name: \"Markus\", role: \"admin\")\r\nUser.create(name: \"Max\")\r\n\r\nputs User.admins.names # [\"Klaus\", \"Markus\"]<\/pre>\n

Dies ist eine interessante Eigenschaft, die mir in den bisherigen Rails-Dokumentationen nicht aufgefallen ist. Erst nach gezielter Suche konnte ich einen Hinweis in den API-Docs finden<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"

Ein Scope in Active Record ist nichts anderes als\u00a0syntaktischer Zucker f\u00fcr das Definieren einer Klassenmethode. Die folgenden User-Models f\u00fchren zum selben Ergebnis: class User < ActiveRecord::Base scope :admins, -> { where(role: „admin“) } end class User < ActiveRecord::Base def self.admins where(role: „admin“) end end Da man Scopes verketten kann dr\u00e4ngt sich der (berechtigte) Verdacht auf,… Methoden f\u00fcr Active-Record-Relationen definieren<\/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":[597,527,553,552],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2693"}],"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=2693"}],"version-history":[{"count":8,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2693\/revisions"}],"predecessor-version":[{"id":2701,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2693\/revisions\/2701"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=2693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=2693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=2693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}