小编Fro*_*ost的帖子

如何有效地擦除Ruby的负零浮点?

在Ruby中0.0 * -1 == -0.0.

我有一个应用程序,我将一堆Float对象乘以-1,但我不喜欢-0.0输出,因为它令人困惑.

是否有一种智能的Float#to_s输出方式0.0而不是-0.0

Float通过某种擦除器/帮助器方法运行每个对象我完全没问题,但以下情况往往让我更加困惑:

def clean_output(amount)
  if amount.zero?
    0.0
  else
    amount
  end
end
Run Code Online (Sandbox Code Playgroud)

更新:

为了更准确地说明我正在寻找什么,我想要一个解决方案,我可以在一大堆浮点运行,其中一些是负面的,一些是积极的.负面的应该保持负值,除非它们是负零,即-0.0.

例子:

clean_output(-0.0) #=>  0.0
clean_output(-3.0) #=> -3.0
clean_output(3.0)  #=>  3.0
Run Code Online (Sandbox Code Playgroud)

ruby floating-point negative-number

16
推荐指数
2
解决办法
2912
查看次数

在运行时切换rails中的邮件传递方法

我正在尝试设置rails应用程序,以便我可以在不同的邮件传递方法之间进行选择,具体取决于某些条件是否为真.

所以,给出两种交付方式:

ActionMailer::Base.add_delivery_method :foo
ActionMailer::Base.add_delivery_method :bar
Run Code Online (Sandbox Code Playgroud)

我以为我能够创建一个电子邮件拦截器来做这样的事情:

class DeliveryMethodChooser
  def self.delivering_email(message)
    if some_condition
      # code to use mail delivery method foo
    else
      # code to use mail delivery method bar
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但问题是,我不确定如何实际设置更改给定邮件使用的邮件传递方法.有任何想法吗?甚至可以动态选择要使用的delivery_method吗?

actionmailer interceptor ruby-on-rails-3

10
推荐指数
2
解决办法
5129
查看次数

Rails和类变量

class MainController < ApplicationController

  @my_var = 123
   def index
    var1 = @my_var
   end

   def index2
    var2 = @my_var
   end
end
Run Code Online (Sandbox Code Playgroud)

为什么两者var1都不var2相等123

ruby

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

尝试对包含在 activerecord 中的结果进行排序

我有一个多次加入另一个模型的 activerecord 模型:

class Claim < ActiveRecord::Base
  belongs_to :user
  belongs_to :treated_by, foreign_key: :treated_by_id, class_name: 'User'
  belongs_to :person_involved, foreign_key: :person_involved_id, class_name: 'User'
  belongs_to :case_manager, foreign_key: :case_manager_id, class_name: 'User'
end
Run Code Online (Sandbox Code Playgroud)

在某些时候,我希望获取 Claims 及其所有 User 实例,因此我通过使用包含来避免 N+1 查询:

claims = Claim.all.includes(:user, :treated_by, :person_involved)
Run Code Online (Sandbox Code Playgroud)

这很好,但现在我想对声明进行排序(没有它们在内存中)所以我想做一些类似的事情:

Claim.all.includes(:user, :person_involved, :treated_by).order('treated_by.last_name')
Run Code Online (Sandbox Code Playgroud)

但是除非我像这样使用表名,否则我会得到无效的 SQL:

Claim.all.includes(:user, :person_involved, :treated_by).order('users.last_name')
Run Code Online (Sandbox Code Playgroud)

例如,这显然不会帮助我通过用户 last_name 的子集处理来订购。我该如何正确地做到这一点?

activerecord ruby-on-rails

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

在 pytube 模块问题中解压的值太多

2020 年 7 月 27 日星期一,我正在完美地运行 pytube 模块,但一天后它的代码不再起作用。显示的值太多,无法解压(预期为 2)

from pytube import YouTube
url = input ("Entry url : ")
yt = YouTube(url)
captions = yt.captions.get_by_language_code('en')
all = captions.generate_srt_captions()
print(all)
Run Code Online (Sandbox Code Playgroud)

有人知道吗?或者像这样的其他模块来提取 YouTube 字幕?

python python-py

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

使用 BUNDLE_FROZEN

我经常在 Dockerfiles 中看到以下行

ENV BUNDLE_FROZEN=true
Run Code Online (Sandbox Code Playgroud)

我检查了捆绑程序文档,它显示“不允许更改 Gemfile”。但我很困惑为什么有人会想要禁止人们更改 Gemfile。毕竟,随着项目的发展,我们可能会添加新的宝石。有人可以解释一下为什么我们需要这个环境变量,如何以及何时使用它,以及为什么它经常出现在 Dockerfile 中?

ruby ruby-on-rails bundler

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