self [:name]如何工作rails

时间:2016-03-19 02:53:53

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

我在用户模型中创建了一个阅读器方法

def name
self[:name]
end

我很难理解自己[:name]
看起来我正在使用Hash中的键访问一个值,但是我可以告诉它不是哈希。

我也尝试在ruby中创建类来模拟这个但是不能让它们工作所以我不确定这是ruby还是rails我不理解的东西。

1 个答案:

答案 0 :(得分:4)

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与数据一起使用,或多或少是由关系数据库支持的Hash,所以说model[:attribute_name]是相当自然的。因此存在[]方法。