ruby-on-rails - 通过 Ruby 中的散列使实例变量可访问

标签 ruby-on-rails ruby ruby-on-rails-4 activerecord

在 Rails 中,ActiveRecord 对象、属性可以通过方法和 Hash 访问。示例:

user = User.first  # Assuming User to be inheriting from ActiveRecord::Base
user.name # Accessing attribute 'name' via method
user[:name] # Attribute 'name' is accessible via hash as well

对于不是从 ActiveRecord::Base 继承的类,如何使实例变量可以通过散列访问?

最佳答案

不是“通过Hash”,而是“数组访问”操作符。

要实现它,你需要定义方法:

def [](*keys)
  # Define here
end

def []=(*keys, value)
  # Define here
end

当然,如果您不想使用多个键来访问一个元素,您可以只使用 key 而不是 *keys,这样您没有一组键(即使只给出一个键),而只有一个键。

许多其他类实现了它,即 Struct,因此您可以自由选择现有实现或推出自己的实现。

让实例变量受到这些方法的影响意味着使用instance_variable_get/instance_variable_set来实现它们。没什么特别的。

关于ruby-on-rails - 通过 Ruby 中的散列使实例变量可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977315/

相关文章:

ruby-on-rails - 升级到 Rails 4.1 出现错误 : ArgumentError: Unknown key: :order

ruby-on-rails - 如何用 Sunspot 突出显示找到的单词?

ruby-on-rails - 选择产品的属性,例如尺寸/颜色,而无需创建模型来处理它们

ruby - 从 Ruby 数组中获取出现 2 次或更多次的项目

ruby - 读写文件——你能用同样的方法吗? ( ruby )

javascript - 使用Jquery显示link_to,返回JSON数据

ruby-on-rails - 使用 find_by_sql 查询设计模型时列用户名不存在错误

ruby - 为什么不能在 Ruby 的方法中声明常量?

ios7 - iOS 应用程序 - Rails 4 和 Devise 作为后端

ruby-on-rails - Rails 4 不检测应用程序