Railscast 274:自我[专栏]?

时间:2014-10-03 15:47:37

标签: ruby-on-rails

在railscast#274中,Ryan在用户模型中有以下代码:

def generate_token(column)
  begin
    self[column] = SecureRandom.urlsafe_base64
  end while User.exists?(column => self[column])
end

self [column]是指什么?

1 个答案:

答案 0 :(得分:6)

它指的是ActiveRecord个对象的方法[]=。调用的别名:

  write_attribute(column, SecureRandom.urlsafe_base64)

在你的例子中。

self.attribute_name = "some-value"几乎相同。不同之处在于,如果您执行以下操作:

user["unknown_attribute"] = "some value"

在此期间您将获得ActiveModel::MissingAttributeError: can't write unknown attribute unknown_attribute

user.unknown_attribute = "some value"

会导致NoMethodError: undefined method unknown_attribute= for #<User:0x7185e611>