Ruby on rails 作为对象oid的Ruby模型输出id
我的ruby模型,如下所示:Ruby on rails 作为对象oid的Ruby模型输出id,ruby-on-rails,ruby,backbone.js,mongoid,Ruby On Rails,Ruby,Backbone.js,Mongoid,我的ruby模型,如下所示: class User include Mongoid::Document field :first_name, type: String field :birthdate, type: Date validates :first_name, :birthdate, :presence => true end 输出一个对象,如下所示: { _id: { $oid: "522884c6c4b4ae5c76000001" }, birthdat
class User
include Mongoid::Document
field :first_name, type: String
field :birthdate, type: Date
validates :first_name, :birthdate, :presence => true
end
输出一个对象,如下所示:
{
_id: {
$oid: "522884c6c4b4ae5c76000001"
},
birthdate: null,
first_name: null,
}
我的主干项目不知道如何处理id$oid
我发现了这篇文章和代码:
我不知道该放在哪里,也不知道如何在模型输出上调用它,所以我尝试在内部:
/config/initializers/secret_token.rb
我是Ruby和Rails新手,不知道如何继续,因此非常感谢您的帮助您应该将其放在initializer文件夹中,创建如下文件: /config/initializers/mongoid.rb
module Moped
module BSON
class ObjectId
alias :to_json :to_s
alias :as_json :to_s
end
end
end
奥瑟尔的回答对一切都有效,除了拉布尔。如果使用rabl,则attributes:id将引发异常。以下代码将与rabl兼容
module Moped
module BSON
class ObjectId
def to_json(*args)
to_s.to_json
end
def as_json(*args)
to_s.as_json
end
end
end
end
有关更多信息,请参阅github问题对Kirk答案的反复介绍: 在Mongoid 4中,Moped的BSON实现已被删除,取而代之的是MongoDB BSON gem,因此Mongoid 4用户的正确版本为:
module BSON
class ObjectId
def to_json(*args)
to_s.to_json
end
def as_json(*args)
to_s.as_json
end
end
end
这里有一个更好的答案
require "bson"
class Jbuilder < JbuilderProxy
def _extract_method_values(object, *attributes)
attributes.each do |key|
value = object.public_send(key)
if value.is_a? ::BSON::ObjectId
value = value.to_s
end
_set_value key, value
end
end
end
需要“bson”
类Jbuilder
对于使用Mongoid 4+的人,请使用此
module BSON
class ObjectId
alias :to_json :to_s
alias :as_json :to_s
end
end
monkey patch可以放在任何地方(初始化器听起来不错,不过你应该为这段代码制作一个新的初始化器),它应该可以工作。在您添加了这个并重新启动rails服务器之后,它工作了吗?发生了什么而不是您预期的情况?请,如果您使用语法结构
别名
,请正确使用它:别名到\u json到\u s
。如果您想使用一种实际上必须传递符号的方法,请使用alias_方法:alias_方法:to_json,:to_s
。我需要定义一种方法来包含它还是自动包含初始值设定项?我创建了这个文件,它仍然作为_id输出。$oidhi@azz0r我忘了在as_json方法上添加别名。试试那个密码。关于initializer文件夹,rails在config/initializers/内的所有文件中运行。这也很有效,只要别忘了重新启动服务器,并在缓存API时重置任何缓存(必须通过艰难的方式解决)…这对我来说很有效:如果您按照前面的回答添加别名:to_json:to_s
解决方案,您将得到以下错误:ArgumentError:参数数目错误(1代表0)
module BSON
class ObjectId
alias :to_json :to_s
alias :as_json :to_s
end
end