3
class User < ActiveRecord::Base
...
  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end
...
end

为什么第 3 行中的代码self[column]有效?既然selfUser类的实例,不应该是self.column而不是column吗?我以为那var[index]是数组处理的方式,不是吗?

4

1 回答 1

3

self[column]只是另一种写作方式self.[](column)。where[]是方法名,column是参数。ActiveRecord::Base实现[],因此您可以像在Array.

例子:

class Example
  def [](arg)
    return "foo"
  end
end

x = Example.new
x[1] # => "foo"
x[3] # => "foo"
x["bar"] # => "foo"
于 2013-05-25T20:59:19.367 回答