我创建了一个具有布尔字段的模型,但是当捕获值时它给了我1或0.我发现它是因为布尔的BSON类型是“\ x00”和“\ x01”。
所以我的问题是,如何获得该字段的“布尔”值?我是否需要在模型或控制器上执行一个方法,如果值为1则返回true,否则返回false?或者Mongoid会为我做这个吗?
Mongoid版本: 4.0.0 38de2e9
修改 Mongo Shell
db.feedbacks.find().limit(1).pretty()
{
"_id" : ObjectId("52290a2f56de969f8d000001"),
"like" : "1",
...
}
说明:
我用脚手架创建了一个应用程序:
rails g scaffold反馈如:Boolean
当我插入新记录时,在Mongo中,文档会让我感到难过。 当我执行Feedback.first时,模型中的字段具有“0”或“1”值。
class Feedback
include Mongoid::Document
include Mongoid::Timestamps
field :comment, type: String
field :like, type: Boolean
def isLike?
like=="1"
end
end
这是回购: https://github.com/afucher/4kFeedback/blob/master/app/models/feedback.rb
答案 0 :(得分:4)
如果您使用Boolean
类型,Mongoid会以透明的方式处理它。查看documentation。
编辑:
从rails控制台(在Indicator
模型的应用中定义global
类型的字段Boolean
):
Indicator.first.global?
# => true
Indicator.first.global?.class
# => TrueClass
来自mongo shell的等价物:
> db.indicators.find().limit(1).pretty()
{
"_id" : ObjectId("52319eeb56c02cc74200009c"),
...
"global" : true,
...
}
修改强>
布尔扩展的spec清楚地表明,对于MongoDB端的任何true, "true", "t", "yes", "y", 1, 1.0
,您将获得TrueClass
个实例。同样的错误。
答案 1 :(得分:0)
我可以解决我的问题,阅读check_box文档: http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box
复选框的默认值为“0”或“1”。要更改此值,只需将所需的值传递给标记:
check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
所以,我改为:
<%= f.check_box :like,{}, "true", "false" %>
谢谢杰夫帮助我!!