将TrueClass/FalseClass的值输出为整数或字符串/

kon*_*ung 6 ruby ruby-on-rails

我试图找出是否有一种简单的方法来执行以下操作,将to_i方法添加到TrueClass/FalseClass.

这是一个两难的问题:我的rails应用程序中有一个布尔字段 - 显然在mysql中存储为Tinyint.然而 - 我需要生成基于数据的XML在MySQL并将其发送给客户 - 有SOAP服务需要领域的问题有0或1,因为此字段的值.因此,在XML生成的时间,我需要我的假转换为0,我真为1(这是他们是如何存储在数据库中).由于True&False缺少to_i方法,我可以编写一些if语句,根据true/false状态生成1或0.但是,我有大约10个这些指标和创建,如果/其他每个不是很干.那你建议我做什么?

或者我可以在True/False类中添加to_i方法.但是我不知道我应该在rails应用程序中将它放在哪里?只是在这个特定的模型或其他地方?

mip*_*adi 5

你可以创建一个文件,例如lib/boolean_ints.rb和猴子修补to_i方法TrueClassFalseClass,如你所说.然后,在您需要使用该to_i方法的模型或控制器中,您可以放置

require 'boolean_ints'
Run Code Online (Sandbox Code Playgroud)

在顶部,他们可以使用.


Jos*_*ter 5

使用humanize和扩展TrueClass和FalseClass to_i.

这出现在我的大多数项目中,所以我使用初始化程序(如果你使用的是Rails)将这两个有用的方法添加到每个类中,如下所示:

配置/初始化/ true_and_false.rb

class TrueClass
  def humanize
    'Yes'
  end

  def to_i
    1
  end
end

class FalseClass
  def humanize
    'No'
  end

  def to_i
    0
  end
end
Run Code Online (Sandbox Code Playgroud)

然后它使"人类消费""机器消费"的呈现变得true非常容易:

> true.humanize     #=> Yes
> true.to_i         #=> 1

> false.humanize    #=> No
> false.to_i        #=> 0
Run Code Online (Sandbox Code Playgroud)