草庐IT

ruby - 为什么日期之间的减法会返回 Rational 类型?

我正在尝试对日期执行减法运算。date_sent=Date.parse("2013-01-01")#=>Tue,01Jan2013date_now=Date.today#=>Wed,04Sep2013days=(date_now-date_sent)#=>(246/1)为什么date_now-date_sent返回一个Rational类型? 最佳答案 这是预期的行为。来自docs:d-other→dateorrationalDate.new(2001,2,3)-1#=>#Date.new(2001,2,3)-Date.new(200

ruby-on-rails - 在 Rails 中,为什么 1.year.from_now 与 1.year.to_i.seconds.from_now 不同?

我能否让Rails在几秒钟内将相同的逻辑应用于我的计算,就像它在几年内对我的计算所做的一样?puts"#{1.year.from_now}|#{1.year.to_i.seconds.from_now}"2017-03-2318:48:06UTC|2017-03-2400:48:06UTC我不明白这6小时的时差从何而来。 最佳答案 相差6小时。这是因为以秒为单位的1年(由to_i方法转换)在RubyonRails核心扩展中被定义为365.25天:>>1.year.to_i/60/60/24.0=>365.25这0.25天是实际的6小

ruby - 为什么在 Ruby 中使用类变量被视为 'code smell' ?

根据Reek,创建类变量被认为是“代码味道”。这背后的解释是什么? 最佳答案 您可以在他们关于ClassVariables的文档中找到:Classvariablesformpartoftheglobalruntimestate,andassuchmakeiteasyforonepartofthesystemtoaccidentallyorinadvertentlydependonanotherpartofthesystem.Sothesystembecomesmorepronetoproblemswherechangingsomet

ruby - 为什么 #!/usr/bin/env ruby​​ 在 crontab 中不起作用?

我已经通过rvm(系统范围)安装了ruby​​,并通过普通控制台正常工作,并且我的rails程序在railsrunner和apache2+passenger上运行正常.现在在crontab中,我调用了railsrunnerfoo.bar,它放弃了,仔细检查我看到的日志:/usr/bin/env:ruby:Nosuchfileordirectory有人知道为什么/usr/bin/env在crontab中不起作用吗? 最佳答案 如果您通过rvm安装了ruby​​,则ruby​​可能不在/usr/bin中。取决于rvm的安装位置:bash

ruby - 为什么我不能在 ruby​​ 的父目录中要求一个文件?

请注意,我没有使用Rails。我的目录结构如下:foo/bar/base_classes/base_classes.rb基础类.rb:Dir.glob(File.expand_path(File.join("base_classes/config/constants","*.rb"))){|file|requirefile}Dir.glob(File.expand_path(File.join("base_classes","*.rb"))){|file|requirefile}当我在这个根目录下>>require'base_classes'#=>true>>Card.load![st

ruby - 为什么需要 mongo 给我 LoadError : no such file to load -- openssl

我正在使用UbuntuServer10,Ruby1.9.2当我尝试要求'mongo'时它给我这个错误:irb(main):001:0>require'mongo'LoadError:nosuchfiletoload--opensslfrom/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in`require'from/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in`require'from/usr/local/lib

ruby - 为什么在 Net::HTTP 上使用 Faraday?

为什么有人会使用Faradaygem而不是直接使用Net::HTTP?使用这样的包装器有什么好处? 最佳答案 直接使用Net::HTTP适配器就可以了,它只是将您的代码绑定(bind)到一个特定的接口(interface),这可能与其他工具不同。人们会使用Faraday的主要原因是它包装了多个适配器,其中之一是Net::HTTP。如果您使用Faraday并开始使用Net:HTTP,您可以稍后决定使用Excon,Typhoeus,Patron或EventMachine无需更改超过一两行配置。如果您直接使用Net::HTTP,则必须更改

ruby - 为什么行数太多的方法是一件坏事?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion在我的Rails应用程序中,我有一个这样的方法:defcartifuser_signed_in?@user=current_userif@user.cart.present?@cart=@user.cartelse@cart=falseendelsecart_id=session[:cart_id]ifcart_id.present?@cart=Cart.find(cart_id.to_i

ruby - 为什么括号会影响哈希值?

当我使用respond_with并传递文字哈希时,它给了我错误:syntaxerror,unexpectedtASSOC,expecting'}'`respond_with{:status=>"Notfound"}`但是,当我像这样将文字散列括在括号中时:respond_with({:status=>"Notfound"})函数运行顺利。为什么括号会有所不同?哈希不是封闭调用吗? 最佳答案 调用方法时,方法名后面的左大括号被解释为block的开始。这优先于作为散列的解释。规避此问题的一种方法是使用括号将解释强制执行为方法参数。例如,

ruby - 为什么 Ruby 在做同样的事情时有 zip 和 transpose?

他们似乎在做同样的事情。g=[{a:"A"},{b:"B"}]r=[{x:"X"},{y:"Y"}]g.zip(r)#=>[[{:a=>"A"},{:x=>"X"}],[{:b=>"B"},{:y=>"Y"}]][g,r].transpose#=>[[{:a=>"A"},{:x=>"X"}],[{:b=>"B"},{:y=>"Y"}]]为什么有这两种方法? 最佳答案 #transpose假设self是数组的数组并转置行和列。#zip假设self可以是任何Enumerable对象。这里有更多区别a=[12,11,21]b=[1,2][