在railscast#274中,Ryan在用户模型中有以下代码:
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
self [column]是指什么?
答案 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>