Dav*_*ers 19 ruby ruby-on-rails-3
我attr_accessor_with_default在rails模型中使用的一些代码现在给我一个弃用警告,告诉我"使用Ruby代替!"
所以,想到可能有一个新的位ruby 1.9.2使得attr_accessor句柄默认,我用Google搜索,但我没有看到.我确实看到了一堆覆盖attr_accessor来处理默认值的方法.
当他们告诉我"使用Ruby?"时,这是什么意思?或者我现在应该写完整的getter/setter?还是有一些我找不到的新方法?
ste*_*lag 29
这个apidock页面建议在初始化方法中执行此操作.
class Something
attr_accessor :pancakes
def initialize
@pancakes = true
super
end
end
Run Code Online (Sandbox Code Playgroud)
super在使用ActiveRecord或类似设备时,请不要忘记打电话.
Pan*_*kaj 13
attr_accessor :pancakes
def after_initialize
return unless new_record?
self.pancakes = 11
end
Run Code Online (Sandbox Code Playgroud)
这可确保将值初始化为仅适用于新记录的某些默认值.
由于您可能非常了解您的数据,因此假设nil不是有效值是完全可以接受的。
这意味着您可以取消after_initialize,因为这将为您创建的每个对象执行。正如一些人指出的那样,这对性能来说(可能)是灾难性的。此外,无论如何内联示例中的方法在 Rails 3.1 中已被弃用。
要“改用 Ruby”,我会采用这种方法:
attr_writer :pancakes
def pancakes
return 12 if @pancakes.nil?
@pancakes
end
Run Code Online (Sandbox Code Playgroud)
因此,稍微减少 Ruby 的魔力并编写您自己的 getter。毕竟,这正是您想要完成的事情,而且它非常好且简单,任何人都可以将他/她的头环绕起来。
| 归档时间: |
|
| 查看次数: |
13270 次 |
| 最近记录: |