Railscast 274:自我[专栏]?

mai*_*aik 2 ruby-on-rails

在railscast#274中,Ryan在User模型中具有以下代码:

def generate_token(column)
  begin
    self[column] = SecureRandom.urlsafe_base64
  end while User.exists?(column => self[column])
end
Run Code Online (Sandbox Code Playgroud)

自我[专栏]指的是什么?

Mau*_*res 6

它指的是方法[] = at ActiveRecordobjects.调用的别名:

  write_attribute(column, SecureRandom.urlsafe_base64)
Run Code Online (Sandbox Code Playgroud)

在你的例子.

它和做的几乎一样self.attribute_name = "some-value".不同之处在于,如果您执行以下操作:

user["unknown_attribute"] = "some value"
Run Code Online (Sandbox Code Playgroud)

你会得到一段ActiveModel::MissingAttributeError: can't write unknown attribute unknown_attribute时间:

user.unknown_attribute = "some value"
Run Code Online (Sandbox Code Playgroud)

会造成一个 NoMethodError: undefined method unknown_attribute= for #<User:0x7185e611>