标签: ruby

你在Ruby中称为&:运算符是什么?

可能的重复:
Ruby/Ruby on Rails&符号冒号快捷方式
map(&:name)在Ruby中意味着什么?

我正在阅读Stackoverflow并偶然发现以下代码

array.map(&:to_i)
Run Code Online (Sandbox Code Playgroud)

好的,很容易看出这段代码的作用,但我想了解更多关于&:我以前从未见过的构造.

不幸的是,我能想到的只是"lambda",而不是.谷歌告诉我Ruby中的lambda语法是->->(x,y){ x * y }

所以&:除了调用单一方法之外,任何人都知道神秘是什么以及它能做什么?

ruby

34
推荐指数
1
解决办法
2万
查看次数

在Heroku上进行热部署,无需停机

推送到Heroku的一个不好的方面是我必须在运行数据库迁移之前推送代码(并且服务器自动重启).

这显然会导致用户在没有新表/属性的情况下浏览具有新代码的网站时出现大约500个错误:Heroku提出的解决方案是使用维护模式,但我想要一种没有缺点的方法让我的webapp每次都运行!

有办法吗?例如Capistrano:

  • 我准备代码部署在一个新的目录中
  • 我运行(向后)迁移,旧代码继续完美运行
  • 我将mongrel实例转换到新目录并重新启动服务器

......我没有停机时间!

ruby deployment capistrano heroku uptime

34
推荐指数
4
解决办法
9740
查看次数

Rails类<< self

我想了解class << self下一个例子中的含义.

module Utility
  class Options #:nodoc:
    class << self
      def parse(args)          
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby class

34
推荐指数
2
解决办法
1万
查看次数

34
推荐指数
4
解决办法
1万
查看次数

从Time对象获取下一个/上个月

我有一个Time对象,想找到下一个/上个月.添加减去天数不起作用,因为每月的天数不同.

time = Time.parse('21-12-2008 10:51 UTC')
next_month = time + 31 * 24 * 60 * 60
Run Code Online (Sandbox Code Playgroud)

随着人们不得不照顾滚动,月份的增量也会下降

time = Time.parse('21-12-2008 10:51 UTC')
next_month = Time.utc(time.year, time.month+1)

time = Time.parse('01-12-2008 10:51 UTC')
previous_month = Time.utc(time.year, time.month-1)
Run Code Online (Sandbox Code Playgroud)

我发现的唯一工作是

time = Time.parse('21-12-2008 10:51 UTC')
d = Date.new(time.year, time.month, time.day)
d >>= 1
next_month = Time.utc(d.year, d.month, d.day, time.hour, time.min, time.sec, time.usec)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式做到这一点,我没有看到?你会怎么做?

ruby

34
推荐指数
7
解决办法
4万
查看次数

Rails:覆盖ActiveRecord关联方法

有没有办法覆盖ActiveRecord关联提供的方法之一?

比方说,我有以下典型的多态has_many:通过关联:

class Story < ActiveRecord::Base
    has_many :taggings, :as => :taggable
    has_many :tags, :through => :taggings, :order => :name
end


class Tag < ActiveRecord::Base
    has_many :taggings, :dependent => :destroy
    has_many :stories, :through => :taggings, :source => :taggable, :source_type => "Story"
end
Run Code Online (Sandbox Code Playgroud)

您可能知道这会为Story模型添加一大堆相关方法,如标签,标签<<,tags =,tags.empty?等.

我如何重写这些方法之一?特别是标签<<方法.覆盖普通的类方法很容易,但我似乎无法找到有关如何覆盖关联方法的任何信息.做点什么

def tags<< *new_tags
    #do stuff
end
Run Code Online (Sandbox Code Playgroud)

调用它时会产生语法错误,所以显然不那么简单.

ruby activerecord overriding ruby-on-rails

34
推荐指数
2
解决办法
2万
查看次数

在sublime text 2中执行Ruby代码

如何使用ST2运行Ruby文件并查看输出?我以为我应该使用build命令.但如果我有这个:

def foobar
  "hello world"
end

puts foobar
Run Code Online (Sandbox Code Playgroud)

然后按cmd + shift + b.我只看到了

[Finished in 0.1s]
Run Code Online (Sandbox Code Playgroud)

在textmate我可以使用cmd + r(运行命令)并查看ruby脚本中的所有输出.

我错过了什么?

ruby sublimetext2

34
推荐指数
2
解决办法
4万
查看次数

Ruby是否提供了使用指定编码执行File.read()的方法?

在ruby 1.9.x中,我们可以指定编码File.open('filename','r:iso-8859-1').如果我直接将许多短文件读入字符串,我通常更喜欢使用单行File.read().有没有办法可以直接指定编码,或者我是否必须采用以下方法之一?

str = File.read('filename')
str.force_encoding('iso-8859-1')
Run Code Online (Sandbox Code Playgroud)

要么

f = File.open('filename', 'r:iso-8859-1')
s = ''
while (line = f.gets)
    s += line
end
f.close
Run Code Online (Sandbox Code Playgroud)

ruby encoding file

34
推荐指数
1
解决办法
2万
查看次数

Python是否在Ruby中执行类似于"string#{var}"的变量插值?

在Python中,编写它是很繁琐的:

print "foo is" + bar + '.'
Run Code Online (Sandbox Code Playgroud)

我可以在Python中做这样的事吗?

print "foo is #{bar}."

ruby python language-comparisons string-formatting string-interpolation

34
推荐指数
5
解决办法
3万
查看次数

如何只获取没有命名空间的类名

这是一个类.

module Foo
  class Bar
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望得到Bar没有的班级名称Foo.

bar = Foo::Bar.new
bar.class.to_s.match('::(.+)$'){ $1 }
Run Code Online (Sandbox Code Playgroud)

我可以通过这段代码得到类名,但我不认为这是获得它的最佳方法.

是否有更好的方法来获取没有命名空间的类的名称?

ruby namespaces

34
推荐指数
2
解决办法
7602
查看次数