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]有効なのはなぜですか? selfはclassのインスタンスなのでUser、columnではなくself.columnにすべきではないでしょうか?var[index]それが配列処理のやり方だと思いましたね。

4

1 に答える 1

3

self[column]は単なる別の書き方self.[](column)です。ここ[]で、 はメソッド名で、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 に答える