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