1

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

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

Mongoid 版本: 4.0.0 38de2e9

编辑 蒙戈壳

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

4

2 回答 2

4

Boolean如果您使用该类型,Mongoid 会以透明的方式处理它。查看文档

编辑

从 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,
    ...
}

编辑

布尔扩展的规范清楚地表明,对于true, "true", "t", "yes", "y", 1, 1.0MongoDB 端的任何一个,您都将获得一个TrueClass实例。假的也一样。

于 2013-09-12T16:44:49.497 回答
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" %>

谢谢杰夫帮助我!!

于 2013-09-14T15:07:14.333 回答