小编Ste*_*fan的帖子

难道我不能简单地获得I18n-ed的日期名称吗?

我也很喜欢使用带红宝石的导轨.

我只想获得I18n.l一天的名字或一个月的名字,没有完整的日期或时间.因为我没有它.

例如,我只是想以国际化为例

= l Date::DAYNAMES[0]
Run Code Online (Sandbox Code Playgroud)

要么

= l Date::MONTHNAME[0]
Run Code Online (Sandbox Code Playgroud)

可能吗?

ruby-on-rails rails-i18n

9
推荐指数
1
解决办法
5054
查看次数

如何转置不同大小的红宝石阵列?

我有一个数组:

arr=[[1,2,3],[4,5],[6]],
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

arr.transpose 
Run Code Online (Sandbox Code Playgroud)

但它不起作用,如何解决?

我正进入(状态

 [[1,2,3],[4,5],[6]].transpose
IndexError: element size differs (2 should be 3)
    from (irb):13:in `transpose'
    from (irb):13
    from /home/durrant
Run Code Online (Sandbox Code Playgroud)

我的解决方案

arr.reduce(&:zip).map(&:flatten)
Run Code Online (Sandbox Code Playgroud)

输出:

[[1, 4, 6], [2, 5, nil], [3, nil, nil]]
Run Code Online (Sandbox Code Playgroud)

ruby arrays transpose

9
推荐指数
2
解决办法
2674
查看次数

检查字符串是否仅包含ruby中的数字

我有一个字符串作为参数传递给函数.在这里,我想检查字符串是否只包含数字.所以我有一张如下的支票:

def check_string(string)
  result = false
  if string.to_i.to_s.eql? string
    result =  true
  end
  result
end
Run Code Online (Sandbox Code Playgroud)

但是当字符串以0开头时出现问题.在这种情况下,返回false.

check_string('123')  #=> true
check_string('0123') #=> false
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

ruby

9
推荐指数
3
解决办法
1万
查看次数

将字符串对象转换为活动记录类

所以我感兴趣的是有没有办法将字符串转换为活动记录类.

示例:我有一个User继承自的类ActiveRecord::Base.有没有什么办法可以字符串转换"User"User类,所以我可以使用ActiveRecord的方法,如find,where等.

ruby activerecord ruby-on-rails-3

8
推荐指数
1
解决办法
2847
查看次数

数组的所有可能分布,来自数字

我不太清楚如何表达这一点,所以我只举例.

如果我写:

some_method(["a", "b"], 3)
Run Code Online (Sandbox Code Playgroud)

我希望它能恢复某种形式

[{"a" => 0, "b" => 3},
 {"a" => 1, "b" => 2},
 {"a" => 2, "b" => 1},
 {"a" => 3, "b" => 0}]
Run Code Online (Sandbox Code Playgroud)

如果我传入

some_method(%w(a b c), 2)
Run Code Online (Sandbox Code Playgroud)

预期的回报值应该是

[{"a" => 2, "b" => 0, "c" => 0},
 {"a" => 1, "b" => 1, "c" => 0},
 {"a" => 1, "b" => 0, "c" => 1},
 {"a" => 0, "b" => 2, "c" => 0},
 {"a" => 0, "b" => 1, "c" => …
Run Code Online (Sandbox Code Playgroud)

ruby permutation

8
推荐指数
2
解决办法
301
查看次数

在Ruby中,对于未定义的变量“ foo”,为什么“ foo = foo”不会引发错误?

foo是未定义的变量时,尝试访问它会引发NameError

foo
#=> NameError: undefined local variable or method `foo'

a = foo
#=> NameError: undefined local variable or method `foo'
Run Code Online (Sandbox Code Playgroud)

为什么不foo = fooNameError

foo = foo
#=> nil
Run Code Online (Sandbox Code Playgroud)

昨天,我花了几个小时来跟踪此行,这是程序中的错误...

capture = capture.to_i
Run Code Online (Sandbox Code Playgroud)

我原本打算做的是转换capture_strInteger。相反,我所做的是nil通过说来引入a capture = capture,然后将零变为a 0。所以我在做这个...

capture = capture.to_i
#=> 0
Run Code Online (Sandbox Code Playgroud)

但是我一直错误地假设NameError会像这样抛出一个变量...

capture = capture_str.to_i
#=> NameError: undefined local variable or method `capture_str'
Run Code Online (Sandbox Code Playgroud)

ruby

8
推荐指数
1
解决办法
107
查看次数

从Ruby中的列表中获取对的所有组合

我有一个元素列表(例如数字),我想检索所有可能的对的列表.我怎么能用Ruby做到这一点?

例:

l1 = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

结果:

l2 #=> [[1,2], [1,3], [1,4], [1,5], [2,3], [2,4], [2,5], [3,4], [3,5], [4,5]]
Run Code Online (Sandbox Code Playgroud)

ruby arrays combinations

7
推荐指数
2
解决办法
4448
查看次数

即使在Ruby中IF条件求值为false时,如何创建局部变量?

在irb中尝试以下内容:(我使用的是Ruby 2.0.0-p247)

blah
#=> NameError: undefined local variable or method `blah' for main:Object

if false
  blah = 'blah'
end
#=> nil 

blah
#=> nil
Run Code Online (Sandbox Code Playgroud)

我很惊讶,blah分配nil甚至当if条件计算为false.我认为在if条件评估时跳过了代码false.

有Ruby内部知识的人可以解释一下这是怎么发生的吗?

谢谢

ruby variables

7
推荐指数
1
解决办法
97
查看次数

如何检查内存中记录的数据库更改?

我想检查一个ActiveRecord实例是否在数据库方面被更改.就像是:

p1 = Product.first
p1.name #=> "some name"

p2 = Product.first
p2.name = "other name"
p2.save #=> true

p1.database_changed? #=> true
Run Code Online (Sandbox Code Playgroud)

我目前正在将记录的属性与持久化属性进行比较:

class Product < ActiveRecord::Base

  def database_changed?
    Product.find(id).attributes != attributes
  end

end
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我想知道是否有内置的方法来查找数据库更改?

ruby-on-rails

7
推荐指数
1
解决办法
1154
查看次数

RSpec - 如何挽救并重试测试?

由于Net::ReadTimeout错误,我们的测试间歇性失败。

我们尚未找到永久解决方案。现在我们想尝试挽救该特定错误并重新运行测试。这不是一个理想的解决方案或真正的解决方案,但我们在短期内需要一些东西。

我们如何重新运行失败的 rspec 测试?我的意思是测试套件如何自动为该测试执行此操作?

我们可以这样捕获错误:

# spec/support/capybara.rb
def rescue_net_read_timeout(max_tries = 1, tries = 0, &block)
  yield
rescue Net::ReadTimeout => e
  Rails.logger.error e.message
end
Run Code Online (Sandbox Code Playgroud)

但我们如何让它尝试重新运行该测试呢?我们想要尝试重新运行测试,然后如果重新运行通过且没有错误,则继续进行(理想情况下将其记录下来),否则将真正失败并考虑测试,因此套件失败。

ruby rspec capybara

7
推荐指数
1
解决办法
3728
查看次数