ruby-on-rails - Rails 模块中的 mattr_accessor 是什么?

标签 ruby-on-rails ruby class module activesupport

我真的无法在 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 使用 mattr_accessor(模块访问器)和 cattr_accessor(以及 _reader/_writer 版本)。由于 Ruby 的attr_accessor实例 生成getter/setter 方法,cattr/mattr_accessor 中提供getter/setter 方法或模块级别。因此:

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 = "admin@example.com"
>> Config.hostname # => "example.com"
>> Config.admin_email # => "admin@example.com"

关于ruby-on-rails - Rails 模块中的 mattr_accessor 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185573/

相关文章:

ruby-on-rails - HTTParty 未定义方法 '+' 为 nil :NilClass

ruby-on-rails - 从 Rails : dependency issues 调用外部 rake 任务

vba - 如何将所有类硬编码值保存在一个地方

ruby-on-rails - 为什么 Apache 还没有可行的 mod_ruby?

ruby-on-rails - rails YAML : NOT NULL constraint failed in joining table

ruby - 好的 ruby 外壳?

ruby-on-rails - 命名空间 Controller 重定向 url

ruby-on-rails - Rails 不处理 get 请求中的 JSON 参数

c# - OOPS 概念 : What is the difference in passing object reference to interface and creating class object in C#?

java - secret 是否可以隐藏在提供访问凭据的 'safe' java 类中?