Som*_*Guy 18 ruby ruby-on-rails
在Ruby on Rails中,在模型中使用self.attribute和attribute之间的区别是什么?
在此示例中,假设my_attr是存储在数据库中的用户的属性.
class User < ActiveRecord::Base
def do_something!
self.my_attr = 123
end
def do_another_thing!
my_attr = 456
end
end
Run Code Online (Sandbox Code Playgroud)
mea*_*gar 23
区别在于一个有效,另一个没有 - 或者至少不是你想要的.
你的第二个版本没有做任何事情.它不等同于调用self.my_attr = 123,而是简单地创建一个被调用的局部变量my_attr并将其设置为123,然后在方法返回时将其抛出.它不会my_attr以任何方式影响模型的价值.
class User < ActiveRecord::Base
def do_another_thing!
my_attr = 456
puts self.my_attr # nil (or whatever value it was before)
end
end
Run Code Online (Sandbox Code Playgroud)
相反,如果要访问在对象上定义的方法,则可以(并且应该)省略self:
class User
def name=(value)
@name = value
end
def name
@name
end
def age=(value)
@age = value
end
def age
@age
end
def do_something
self.name = "bob" # self is required
puts name # bob (self.name)
age = 47 # @age is unaffected
age # 47 (local variable), but self.age is nil
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,这不是Rails问题,而是一个Ruby问题.这里没有特定于Rails的代码,这种行为是Ruby语法工作方式的一部分.
| 归档时间: |
|
| 查看次数: |
8167 次 |
| 最近记录: |