【问题标题】:How self[:name] works railsself[:name] 的工作原理
【发布时间】:2016-03-19 02:53:53
【问题描述】:
我在我的用户模型中创建了一个阅读器方法
def name
self[:name]
end
我很难理解 self[:name]
看起来我正在使用 Hash
中的键访问值,但据我所知,它不是 Hash。
我也尝试在 ruby 中创建类来模拟这一点,但无法让它们工作,所以我不确定这是我不理解的 ruby 还是 rails 的东西。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
rails-activerecord
【解决方案1】:
ActiveRecord 提供 [] method:
[](attr_name)
返回attr_name标识的属性值,经过类型转换...
所以说self[:name] 只是访问模型的name 属性的一种迂回方式。
[] 与 Ruby 中的任何其他方法一样,您可以在任何您想要的类中定义自己的方法:
class C
def [](k)
# do whatever you want
end
end
c = C.new
c[:pancakes]
ActiveRecord 用于数据,或多或少是由关系数据库支持的哈希,所以说model[:attribute_name] 是相当自然的。因此存在[] 方法。