Ruby on rails 在Mongoid上使用布尔字段

Ruby on rails 在Mongoid上使用布尔字段,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我创建了一个具有布尔字段的模型,但当捕捉到值时,它给了我1或0。我发现这是因为Boolean的BSON类型是“\x00”和“\x01” 所以我的问题是,我如何得到这个字段的“布尔”值?我是否需要在模型或控制器上执行一个方法,如果值为1,则返回true;如果值为0,则返回false?或者Mongoid会为我做这件事吗 Mongoid版本:4.0.0 38de2e9 编辑 蒙戈贝壳 db.feedbacks.find().limit(1).pretty() { "_id" : ObjectId(

我创建了一个具有布尔字段的模型,但当捕捉到值时,它给了我1或0。我发现这是因为Boolean的BSON类型是“\x00”和“\x01”

所以我的问题是,我如何得到这个字段的“布尔”值?我是否需要在模型或控制器上执行一个方法,如果值为1,则返回true;如果值为0,则返回false?或者Mongoid会为我做这件事吗

Mongoid版本:4.0.0 38de2e9

编辑 蒙戈贝壳

db.feedbacks.find().limit(1).pretty()
{
  "_id" : ObjectId("52290a2f56de969f8d000001"),
  "like" : "1",
...
}
解释:

我使用scaffold创建了一个应用程序:

railsg脚手架反馈类似:Boolean

当我插入一个新的记录时,在Mongo中,文档保持我的悲伤。 当我进行反馈时。首先,类似于模型中的字段具有“0”或“1”值

这是回购协议:

如果使用
布尔类型,Mongoid将以透明的方式处理该问题。结帐

编辑

从rails控制台(在带有
指示器的应用程序中
模型定义了
全局
类型为
布尔
)的字段:

mongo shell的等效物:

> db.indicators.find().limit(1).pretty()
{
    "_id" : ObjectId("52319eeb56c02cc74200009c"),
    ...
    "global" : true,
    ...
}
编辑


布尔扩展名的示例清楚地显示,对于MongoDB端的
true、“true”、“t”、“yes”、“y”、1,1.0
中的任何一个,您将得到
TrueClass
实例。false也一样。

如果使用
布尔类型,Mongoid将以透明的方式处理该问题。结帐

编辑

从rails控制台(在带有
指示器的应用程序中
模型定义了
全局
类型为
布尔
)的字段:

mongo shell的等效物:

> db.indicators.find().limit(1).pretty()
{
    "_id" : ObjectId("52319eeb56c02cc74200009c"),
    ...
    "global" : true,
    ...
}
编辑


布尔扩展名的示例清楚地显示,对于MongoDB端的
true、“true”、“t”、“yes”、“y”、1,1.0
中的任何一个,您将得到
TrueClass
实例。false也一样。

我可以通过阅读复选框文档来解决我的问题:

复选框的默认值为“0”或“1”。要更改此值,只需将所需的值传递给标记:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
因此,我改为:

<%= f.check_box :like,{}, "true", "false" %>


谢谢杰夫帮助我

我可以通过阅读复选框文档来解决我的问题:

复选框的默认值为“0”或“1”。要更改此值,只需将所需的值传递给标记:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
因此,我改为:

<%= f.check_box :like,{}, "true", "false" %>



谢谢杰夫帮助我

在蒙哥呢?文件怎么样?global:1或global:true??嗯,好吧,但我使用scaffold,我不知道为什么,当我创建一个新文档时,它会创建一个值为“1”或“0”的文档。我不确定我是否理解您的问题到底在哪里,如果是这样的话,很抱歉。BSON规范规定布尔值存储为
\x00
\x01
。Mongoid(>=3)使用Moped作为底层驱动程序,透明地处理Ruby/BSON转换。您使用的是什么版本的Mongoid?在Mongo中?文件怎么样?global:1或global:true??嗯,好吧,但我使用scaffold,我不知道为什么,当我创建一个新文档时,它会创建一个值为“1”或“0”的文档。我不确定我是否理解您的问题到底在哪里,如果是这样的话,很抱歉。BSON规范规定布尔值存储为
\x00
\x01
。Mongoid(>=3)使用Moped作为底层驱动程序,透明地处理Ruby/BSON转换。您使用的是哪个版本的Mongoid?您可以添加反馈模型的代码吗?编辑并放置github repo。我克隆了repo,并从rails控制台创建了一个反馈实例。一切正常(
feedback=feedback.create!(like:true);feedback.reload;feedback.like#=>true
)嗯……我想是的,这就是scaffold生成的视图上的复选框=/复选框值是0或1,但我需要在控制器上处理这个问题??您是否尝试在视图中显式指定复选框的值(比如说“true”)或者“是”)?你能添加你的反馈模型的代码吗?编辑后,放上github repo。我克隆了repo,并从rails控制台创建了一个反馈实例。一切正常(
feedback=feedback.create!(like:true);feedback.reload;feedback.like#=>true
)嗯……我想是的,这就是scaffold生成的视图上的复选框=/复选框值是0或1,但我需要在控制器上处理这个问题??您是否尝试在视图中显式指定复选框的值(比如说“true”)或者“是”)?