Tag: ruby 1.9

如何使用Ruby 1.9在Rails中使用美式日期?

我在美国,我们通常将日期格式设置为“月/日/年”。 我正在努力确保使用Ruby 1.9的Rails应用程序在任何地方都采用这种格式,并按照它在Ruby 1.8下的方式工作。 我知道很多人都有这个问题,所以我想在这里创建一个明确的指南。 特别: ’04 / 01/2011’是2011年4月1日,而不是2011年1月4日。 ‘2011年4月1日’也是2011年4月1日 – 不需要领先的零。 我怎样才能做到这一点? 这是我到目前为止所拥有的。 控制日期#to_s行为 我在application.rb有这一行: # Format our dates like “12/25/2011′ Date::DATE_FORMATS[:default] = ‘%m/%d/%Y’ 这确保了如果我执行以下操作: d = Date.new(2011,4,1) d.to_s ……我得到“04/01/2011”,而不是“2011-04-01”。 控制String#to_date行为 ActiveSupport的String#to_date方法目前看起来像这样( 源代码 ): def to_date return nil if self.blank? ::Date.new(*::Date._parse(self, false).values_at(:year, :mon, :mday)) end (如果你不遵循这个,第二行创建一个新的日期,按年顺序传递年,月和日。它获取年,月和日值的方式是使用Date._parse ,它解析一个字符串,然后以某种方式决定这些值是什么,然后返回一个散列.values_at按照Date.new想要它们的顺序从该散列中拉出值。) 因为我知道我通常会传递像“04/01/2011”或“4/1/2011”这样的字符串,所以我可以通过monkeypatching来解决这个问题: class String # Keep a pointer […]

将Ruby符号理解为方法调用

class A def test “Test from instance” end class << self def test "Test from class" end end end p A.send(:test) # "Test from class" p A.new.method(:test).call # "Test from instance" 符号按预期工作,但在这里: s=”test” s1=:s p s1 # :s 为什么:s打印在这里? 我不明白它背后的原因。 有人可以帮我解释一下吗?

ruby顶层定义的方法在哪里?

在顶层,方法定义应该导致Object上的私有方法,并且测试似乎证实了这一点: def hello; “hello world”; end Object.private_instance_methods.include?(:hello) #=> true Object.new.send(:hello) #=> “hello world” 但是,以下也适用于顶层( self.meta是main本征类): self.meta.private_instance_methods(false).include?(:hello) #=> true 似乎hello方法同时在main和Object本征类上定义。 这是怎么回事? 请注意, private_instance_methods的false参数会从方法列表中排除超类方法。

是否有人使用Ruby 1.9.1成功部署了Rails项目?

上周,我成功完成了所有公司应用程序从Ruby 1.8.6到Ruby 1.8.7的转换,包括本地和远程配置。 从现在开始,开发不需要确保与Ruby 1.8.6的向后兼容性。 为了好奇,我尝试针对Ruby 1.9.1运行几个项目的测试套件。 正如预期的那样,我发现了一些与编码相关的问题,但当我发现低级别的不兼容性(例如Rack :: Link已知错误)时,我感到非常震惊。 此时,将开发转移到Ruby 1.9.1的想法根本不适用。 我想知道是否有人使用Ruby 1.9.1成功部署了Rails项目。 您为Rails项目使用哪个Ruby版本? 您打算升级到更新版本吗?

如何在Ruby 1.9上替换Unicode gem?

不幸的是,Unicode 0.1( sudo gem install unicode )在Ruby 1.9上不起作用。 我有以下代码段: require “rubygems” require “unicode” str = “áéíóúç” Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, “”) #=> aeiouc 我使用它将标题转换为永久链接,而不删除重音字符。 有没有办法使用pack或unpack方法转换这些文本?

在ruby 1.9和CSV :: Writer中编写csv

我有一个与ruby 1.87一起工作的代码,但不适用于ruby 1.9。 它说CSV :: Writer是未声明的,但它仍然是rdoc的一部分。 在fastcsv合并之后,csv api是否发生了变化? 我的代码: require ‘csv’ def self.export_csv file_name = File.join(RAILS_ROOT, ‘public’,’csv’,”#{start_date_f}_#{end_date_f}.csv”) return file_name if File.exist?(file_name) @results = find(:all) header_row = [] outfile = File.open(file_name, ‘wb’) CSV::Writer.generate(outfile) do |csv| header_row = [‘gateway_id’,’created’, ‘gateway_status_id’, ‘panel_id’, ‘panel_status’,’volts_out’, ‘amps_out’, ‘temp’,’aid’ ,’sid’, ‘pisid’] csv << header_row end end 我收到的错误:NameError:未初始化的常量CSV :: Writer 请注意,需要’csv’。 我在我的控制台中尝试它,当我执行require’csv’时,它可以工作,但是一旦我调用CSV :: […]

我可以在Ruby 1.9上设置默认字符串编码吗?

这可能听起来很小,但它让我疯了。 自上周五在Ruby 1.9上将应用程序发布到生产以来,我一直有很多与字符编码有关的小例外。 几乎所有这些都是一些变化: Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8 我们有一个国际用户群,所以很多名字都包含变音符号等。如果我修复模板在一堆地方使用force_encoding ,它会弹出flash消息助手。 等等。 目前看起来我已经确定了我所知道的所有内容,通过在一个地方修补ActiveSupport的字符串连接,然后在每个源文件的顶部设置#coding # encoding: utf-8 。 但是,我可能必须记住为我从现在开始的每个Ruby项目的每个文件都做到这一点的感觉,永远,只是为了避免字符串分配问题,并不适合我的胃。 我读到了关于-Ku开关的信息,但是所有内容似乎都警告说这是为了向后兼容并且可能随时消失。 所以我对1.9经验丰富的人提出的问题是:在我的每个文件中设置#encoding 真的有必要吗? 在全球范围内有合理的方法吗? 或者,更好的方法是在绕过内部/外部默认值的字符串的非文字值上设置默认编码? 在此先感谢您的任何建议。

为ruby 1.9设置全局默认编码

我想告诉ruby一切都是utf8,除非另有说明,所以我不必将这些# encoding: utf-8评论放在各处。

字符串#coding不修复“UTF-8中的无效字节序列”错误

我知道关于这个错误有很多类似的问题,我已经尝试了很多没有运气的问题。 我遇到的问题涉及字节\xA1并且正在抛出 ArgumentError:UTF-8中的无效字节序列 我试过以下但没有成功: “\xA1”.encode(‘UTF-8’, :undef => :replace, :invalid => :replace, :replace => “”).sub(”, ”) “\xA1”.encode(‘UTF-8’, :undef => :replace, :invalid => :replace, :replace => “”).force_encoding(‘UTF-8’).sub(”, ”) “\xA1”.encode(‘UTF-8’, :undef => :replace, :invalid => :replace, :replace => “”).encode(‘UTF-8’).sub(”, ”) 每一行都为我抛出错误。 我究竟做错了什么? 更新: 上述行仅在IRB中失败。 但是,我修改了我的应用程序,使用相同的String#encode方法和参数对CVS文件的行进行编码,从文件中读取行时出现相同的错误(注意:如果对同一个字符串执行操作,它会起作用没有使用IO)。 bad_line = “col1\tcol2\tbad\xa1″ bad_line.sub(”, ”) # does NOT fail puts bad_line # => […]

如何在Ruby中引用函数?

在python中,引用函数非常简单: >>> def foo(): … print “foo called” … return 1 … >>> x = foo >>> foo() foo called 1 >>> x() foo called 1 >>> x >>> foo 但是,它似乎在Ruby中有所不同,因为裸foo实际上调用了foo: ruby-1.9.2-p0 > def foo ruby-1.9.2-p0 ?> print “foo called” ruby-1.9.2-p0 ?> 1 ruby-1.9.2-p0 ?> end => nil ruby-1.9.2-p0 > x = foo foo called […]