Frage

ich das nicht wirklich in Rails Dokumentation finden könnte, aber es scheint, wie 'mattr_accessor' ist die Modul logische Folge für 'attr_accessor' ( Getter & Setter) in einer normalen Ruby- Klasse .

Eg. in einer Klasse

class User
  attr_accessor :name

  def set_fullname
    @name = "#{self.first_name} #{self.last_name}"
  end
end

Eg. in einem Modul

module Authentication
  mattr_accessor :current_user

  def login
    @current_user = session[:user_id] || nil
  end
end

Diese Hilfsmethode wird zur Verfügung gestellt von Active .

War es hilfreich?

Lösung

Schienen erstreckt Rubin sowohl mit mattr_accessor (Modul Accessor) und cattr_accessor (sowie _reader / _writer Versionen). Als Rubys attr_accessor erzeugt Getter / Setter-Methoden für Instanzen , cattr/mattr_accessor bieten Getter / Setter-Methoden an der Klasse oder Modul Ebene. Also:

module Config
  mattr_accessor :hostname
  mattr_accessor :admin_email
end

ist die Abkürzung für:

module Config
  def self.hostname
    @hostname
  end
  def self.hostname=(hostname)
    @hostname = hostname
  end
  def self.admin_email
    @admin_email
  end
  def self.admin_email=(admin_email)
    @admin_email = admin_email
  end
end

Beide Versionen können Sie die Variablen auf Modulebene für den Zugriff auf in etwa so:

>> Config.hostname = "example.com"
>> Config.admin_email = "admin@example.com"
>> Config.hostname # => "example.com"
>> Config.admin_email # => "admin@example.com"

Andere Tipps

Hier die Quelle für cattr_accessor

Und

Hier die Quelle für mattr_accessor

Wie Sie sehen können, sind sie ziemlich identisch.

Wie, warum gibt es zwei verschiedene Versionen? Manchmal möchten Sie cattr_accessor in einem Modul schreiben, so können Sie es für die Konfiguration info verwenden

scroll top