2014-10-03 75 views
2

在railscast#274瑞恩在用户模式下面的代码:Railscast 274:self [column]?

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

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

回答

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>

+0

因此,它是同一事物或几乎相同事情?如果是这样,有什么区别? – mikeglaz 2014-10-03 16:03:03

+0

答案中包含差异的示例。 – 2014-10-03 16:07:13

+0

@MichaelGlaz [这是源代码](https://github.com/rails/rails/blob/28c1a81f9a06c8bc268881771ffc1b678cf944a4/activerecord/lib/active_record/attribute_methods.rb#L380)如果你想看到更多。 – 2014-10-03 16:29:19