小编Rom*_*man的帖子

Rubocop 唯一性验证应该使用唯一索引,在从某些特定值开始的值中

我有一个 Rails 模型,用于验证 order_number 值的唯一性,它应该从 1_000_000 开始,因此我添加了一个用作第一个值的变量:

# order model 
STARTING_NUMBER = 1_000_000

validates :order_number, uniqueness: true
Run Code Online (Sandbox Code Playgroud)

当我通过 Rubocop 检查我的代码时,出现错误:

app/models/order.rb:3:3: C: Rails/UniqueValidationWithoutIndex: Uniqueness validation should be with a unique index.
  validates :order_number, uniqueness: true
Run Code Online (Sandbox Code Playgroud)

disable/enable我通过添加Rubocop 评论来修复它:

STARTING_NUMBER = 1_000_000

# rubocop:disable Rails/UniqueValidationWithoutIndex
validates :order_number, uniqueness: true
# rubocop:enable Rails/UniqueValidationWithoutIndex
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?

ruby ruby-on-rails activemodel rails-activerecord rubocop

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

将持续时间以秒为单位转换为小时和分钟并跳过空值

我们有一个持续时间(以秒为单位)值始终大于 60(1 分钟)的时间跟踪模型。

如果在小时或分钟开始时它们不为零且不为零,我需要将持续时间转换为小时和分钟。例如:

duration1 = 63000  # expected value:  17 h 30 m
duration2 = 28800  # expected value:  8 h
duration3 = 1800   # expected value:  30 m
duration4 = 300    # expected value:  5 m
Run Code Online (Sandbox Code Playgroud)

我几乎做到了,但是零值有一个小问题:

Time.at(duration1).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 17 h 30 m

Time.at(duration2).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 8 h 00 m

Time.at(duration3).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 0 h 30 m

Time.at(duration4).utc.strftime('%H h %M m').sub!(/^0/, '') 
# 0 h 05 m
Run Code Online (Sandbox Code Playgroud)

感谢您的回答。

ruby regex

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

如何正确更新git版本?

我使用命令下载了新版本的 git - 版本 2.26.0:

brew upgrade git 但我不能用它!如果我输入:

git --version
$ git version 2.22.0
Run Code Online (Sandbox Code Playgroud)

如果我尝试再次更新:

brew upgrade git
Warning: git 2.26.0 already installed
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

git macos homebrew

5
推荐指数
2
解决办法
9119
查看次数

如何确定已安装的 ruby​​ 版本?

在运行脚本之前,我需要测试正确的 Ruby 版本。在项目中,我们有文件 .ruby_version ,其中包含所需版本的数量。例如 .ruby_version 文件有:

2.5.5
Run Code Online (Sandbox Code Playgroud)

我可以使用 user 获取当前用户版本的 Ruby ruby --version,但此命令返回我需要的更多信息。例如:

ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-darwin19]
Run Code Online (Sandbox Code Playgroud)

所以我的支票不起作用:

2.5.5
Run Code Online (Sandbox Code Playgroud)

知道如何修复它吗?

ruby shell

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