Gem mongoid

jarorwar · 2013年08月19日 · 最后由 jarorwar 回复于 2013年08月19日 · 2804 次阅读
class User #< ActiveRecord::Base
  include Mongoid::Document
  field :login_name, type: String
  field :password, type: String
  field :phone_number, type: String
  field :user_name, type: String
  field :enabled, type: Boolean, default: true

#  attr_accessible :enabled, :login_name, :password, :phone_number, :user_name

end

如上图所示: 原来用的是 mysql,但是现在要用 mongodb,所以就选择了 mongoid,用 activerecord 的时候,主键 字段名称是 id(ar 内置的),现在 mongoid 默认就是 "_id" 了。要兼容之前的程序,我该怎么写啊。我的意思是 mongoid 有木有类似 self.primary_key="id"这样的代码啊。不然的话程序的前端(extjs 部分)需要改动,现在实在是不想改啊!

先谢谢了。

mongoid 已经做了别名。放心调用 idid = 方法

#1 楼 @zgm 怎么调用啊。我看到序列化成 json 的数据人就是“_id"啊~!

{"data":[{"user":{"_id":"5211884be779893b74000001","enabled":false,"login_name":"min.xr","password":"","phone_number":"13444444445","user_name":"minxiaorong"}},{"user":{"_id":"5211884be779893b74000002","enabled":false,"login_name":"tan.f","password":"","phone_number":"13444444446","user_name":"tanfeng"}}],"total":2,"success":true}

#3 楼 @zgm 额。你是建议打这个补丁么?其实我是不想打补丁的。对于,补丁。我觉得自定义个 module 更好。代码如下:

#为了兼容老程序,新的不用这样写了就
  field :id ,type:String

  def id
    self._id
  end

so。。别的办法呢?

#4 楼 @jarorwar 我现在这么做,没发现别的好的方法. 你的方法也可以。但是我倾向于改 view 层,而不是直接改 model.

#5 楼 @zgm 额。好的。明白了。谢谢了。因为 view 的话。我就直接用_id 完了。遍历然后去更改的话,效率比较低啊

#6 楼 @jarorwar blog 中提到了,小对象完全没问题,大对象而且有好多 array 类型的 subdocument 是会有问题,如果你找到什么更好的办法,希望能告诉我!

#7 楼 @zgm 额。我打算改前端了。因为项目刚开始,改动的地方还不是太多。所以。可以改。 对了。请问。mongoid 加入后,rails g scaffold 怎么生成的 model 代码里面不会自动加入 include Mongoid::Document 啊

#9 楼 @zgm 我上次生成的是可以的。这次生成的不行了。这是为什么啊?

#9 楼 @zgm 解决了。因为我在 application 里面加错了东西。谢谢~!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号