1. ホーム
  2. ruby-on-rails

[解決済み] Railsモジュールのmattr_accessorとは何ですか?

2022-09-09 20:34:10

質問

Railsのドキュメントを探しても見つからなかったのですが、どうやら 'mattr_accessor'のようです。 モジュール の傍証となるものです。 'attr_accessor' (getter & setter) を通常のRubyの クラス .

例:クラスで

class User
  attr_accessor :name

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

例:モジュール内

module Authentication
  mattr_accessor :current_user

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

このヘルパーメソッドは ActiveSupport .

どのように解決するのですか?

RailsはRubyを拡張し、両方の mattr_accessor (モジュールアクセッサ) と cattr_accessor (同様に _ reader / _writer のバージョン)。 Rubyの attr_accessor のゲッター/セッターメソッドを生成します。 インスタンス , cattr/mattr_accessor でゲッター/セッターメソッドを提供します。 クラス または モジュール レベルで指定します。 このように

module Config
  mattr_accessor :hostname
  mattr_accessor :admin_email
end

の略です。

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

どちらのバージョンも、このようにモジュールレベルの変数にアクセスすることができます。

>> Config.hostname = "example.com"
>> Config.admin_email = "[email protected]"
>> Config.hostname # => "example.com"
>> Config.admin_email # => "[email protected]"