我无法在Rails文档中找到这个,但似乎'mattr_accessor'是普通Ruby 类中'attr_accessor'(getter&setter)的模块推论.
例如.在课堂上
class User
attr_accessor :name
def set_fullname
@name = "#{self.first_name} #{self.last_name}"
end
end
Run Code Online (Sandbox Code Playgroud)
例如.在一个模块中
module Authentication
mattr_accessor :current_user
def login
@current_user = session[:user_id] || nil
end
end
Run Code Online (Sandbox Code Playgroud)
这个帮助方法由ActiveSupport提供.
我试过做类似的事情
Time.now + 5.days
Run Code Online (Sandbox Code Playgroud)
但这不起作用,即使我依稀记得看到,并且留下深刻的印象,能够做类似的事情2.years.
我如何在Rails 3中做到这一点?
我安装了Active Support 3.0.3,使用Ruby 1.8.7安装了Rails 3.0.3.
当我尝试使用时,1.week.ago我得到了
NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2
Run Code Online (Sandbox Code Playgroud)
其他核心扩展似乎有效.我在一个朋友的计算机上尝试过(同样的安装规范和旧版本),结果相同.
是什么赋予了?
所有这些都在IRB中.
我在Rails 3中转换UTC Time或TimeWithZone本地时间时遇到问题.
Say moment是TimeUTC中的一些变量(例如moment = Time.now.utc).如何转换moment到我的时区,照顾DST(即使用EST/EDT)?
更确切地说,如果时间对应于美国东部夏令时间上午9点和"3月7日上午9点",如果时间是美国东部时间上周一上午9点,我打算打印出"3月14日星期一上午9点".
希望还有另一种方式吗?
编辑:我首先认为 "EDT"应该是一个公认的时区,但"EDT"不是一个实际的时区,更像是时区的状态.例如,要求没有任何意义Time.utc(2011,1,1).in_time_zone("EDT").这有点令人困惑,因为"EST" 是一个实际的时区,在一些不使用夏令时的地方使用,并且是(UTC-5)一年.
所以在Rails 3.2中,不推荐使用ActiveSupport :: Memoizable.
消息如下:
DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.
Run Code Online (Sandbox Code Playgroud)
它指的是"Ruby memoization pattern"(单数),好像有一个模式,我们都应该知道并参考...
我认为他们的意思是:
def my_method
@my_method ||= # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
要么
def my_method
return @my_method if defined?(@my_method)
@my_method = # ... go get the value
end
Run Code Online (Sandbox Code Playgroud)
还有其他我错过的东西吗?
升级到 ruby 3.1 时,我在使用时看到以下排序错误消息YAML.load_file some_file_name
Psych::DisallowedClass:
Tried to load unspecified class: Matrix
Run Code Online (Sandbox Code Playgroud)
其他加载语句会导致类似的错误,但引用不同的未指定类,例如 OpenStruct。看来最新版本的 YAML 只加载允许的白名单中的类,因此需要使用 allowed_class 关键字来允许其他类。我努力了
hsh = YAML.load_file some_file_name, permitted_classes: [Matrix, OpenStruct]
Run Code Online (Sandbox Code Playgroud)
但这给出了错误
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在尝试将图像上传到PingFM.他们的文件说:
media – base64 encoded media data.
Run Code Online (Sandbox Code Playgroud)
我可以通过URL访问此图像.我试过(几乎猜到了)这个:
ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
TypeError: can't convert Tempfile into String
from /usr/lib/ruby/1.8/base64.rb:97:in `pack'
from /usr/lib/ruby/1.8/base64.rb:97:in `encode64'
from (irb):19
from :0
Run Code Online (Sandbox Code Playgroud) 我想在我的一个模型上测试一个抛出特定错误的函数.该函数看起来像这样:
def merge(release_to_delete)
raise "Can't merge a release with itself!" if( self.id == release_to_delete.id )
raise "Can only merge releases by the same artist" if( self.artist != release_to_delete.artist )
#actual merge code here
end
Run Code Online (Sandbox Code Playgroud)
现在我想做一个断言,当我用一个导致每个异常的参数调用这个函数时,实际上会抛出异常.我正在查看ActiveSupport文档,但我没有找到任何有希望的东西.有任何想法吗?
我正在开发的宝石上使用ActiveSupport的核心扩展时遇到问题.
我有它与AS 2.3.8一起使用,但是一旦我想将它移植到3b4,扩展就停止了工作,我的测试结果填充了如下行:
undefined method `blank?' for "something":String
Run Code Online (Sandbox Code Playgroud)
我把它包括在gem "activesupport"后面require "active_support"
还有什么我需要打电话来包含这些扩展吗?
谢谢
如何避免activesupport中的循环参数引用警告.发生在ruby 2.2.0上
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.2.0/gems/activesupport-3.2.21/lib/active_support/values/time_zone.rb:270: warning: circular argument reference - now
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.2.0/gems/ruby-ole-1.2.11.7/lib/ole/types/base.rb:265: warning: duplicated key at line 266 ignored: 4095
Run Code Online (Sandbox Code Playgroud)