在 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/