我正在使用Rails 3和Mongoid gem.但我需要用mongodb数据库列表填充一个组合框.在mongodb shell中,我们可以使用"show dbs"命令列出数据库.mongodb驱动程序中还有getDBNameList()和db.getCollectionNames()命令.但我无法弄清楚如何在rails应用程序上使用ruby中的这些命令.
我也在想; 如果我可以使用mongoid gem获取数据库和集合列表.因为我确信我已经读过mongoid支持使用多个数据库,但我认为它依赖于模型.
所以你怎么看; 有什么解决方案,或者我必须使用mongo-ruby-driver gem,而不是mongoid.
我想将社交网络移植到Mongoid.朋友之间的联接表非常大.Mongoid有没有办法处理这个开箱即用的连接表?我已经看到了几个模型中的自己动手解决方案,但看起来并不高效.有办法处理这个吗?或者这是我不应该使用Mongoid的情况?
我有mongoid和模型翻译的问题.当我尝试在我的模型上使用mongoDB时,我不知道要翻译属性和模型名称.它通常在*.yml文件中,但在这个时候这不起作用.有任何想法吗?
我正在使用Mongoid在Rails中使用MongoDB.
我正在寻找的是积极的记录include.目前我没有在mongoid orm中找到这样的方法.
任何人都知道如何在mongoid或mongomapper中解决这个问题,这是另一个很好的选择.
我有一个包含嵌入标签的Post文档.有时我只显示帖子的标题及其标签.在这些情况下,我在mongoid中使用以下查询:
Post.only(:title).find(id)
Run Code Online (Sandbox Code Playgroud)
然后我将查询结果作为json发送给客户端.不幸的是,标签的bson id使得json比我需要的大得多.如何从查询中排除"_id"字段?
这是我的模特:
class Post
include Mongoid::Document
field :title, :type => String
field :body, :type => String
field :tags, :type => Array
embeds_many :tags
end
class Tag
include Mongoid::Document
field :tag, :type => String
field :type, :type => String
embedded_in :post
end
Run Code Online (Sandbox Code Playgroud) 我刚刚删除了我,database.yml因为我正在尝试使用Mongoid,现在我得到以下内容:
$ rails server
=> Booting WEBrick
=> Rails 3.0.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/application/configuration.rb:88:in `read': No such file or directory - /home/chris-kun/code/thirsty/config/database.yml (Errno::ENOENT)
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/application/configuration.rb:88:in `database_configuration'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.9/lib/active_record/railtie.rb:58:in `block (2 levels) in <class:Railtie>'
from /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
from /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
from /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/lazy_load_hooks.rb:26:in `on_load'
from /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.9/lib/active_record/railtie.rb:57:in `block in <class:Railtie>'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:25:in `instance_exec'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:25:in `run'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:50:in `block in run_initializers'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:49:in `each'
from /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:49:in …Run Code Online (Sandbox Code Playgroud) 我试图使用mongoid而不是活动模型使用rails 3.1身份验证
class User
include Mongoid::Document
include ActiveModel::SecurePassword
has_secure_password
validates_presence_of :password, :on => :create
attr_accessor :email, :password, :password_confirmation
field :email, :type => String
field :password_digest, :type => String
end
Run Code Online (Sandbox Code Playgroud)
问题是bycrypt无法识别password_digest,如在活动模型示例中http://railscasts.com/episodes/270-authentication-in-rails-3-1
谢谢
希望这个标题非常明显.
我正在使用mongoidRails应用程序作为我的ORM,我想知道是否有人知道它是否与ActiveRecord的serialize方法等效.我查看了mongoid文档,但还没有找到任何东西.
以下是该模型的示例:
class Foo
include Mongoid::Document
field :params, type: String
serialize :params # method from ActiveRecord
end
Run Code Online (Sandbox Code Playgroud)
提前致谢!
出于性能原因,我only()在编写mongoid查询时尽可能多地使用关键字来指定我要加载的字段.
通常的嫌疑人,例如,当我想要所有管理员的用户电子邮件仅用于显示目的时.
我会写:
User.where(:groups => :admins).only(:email).each do |u|
puts u.email
end
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我的用户模型中充满了很多数据,在列出一堆电子邮件时我很乐意忽略这些数据.
但是,现在让我们想象一下,我的用户是通过Project模型引用的,因此对于我可以做的每个项目:project.user.由于mongoid的延迟加载,我的对象用户只有在调用引用时才会被实例化(并从数据库中查询).
但是,如果我想列出所有管理项目所有者的所有电子邮件呢?
我会写这个:
Project.where(:admin_type => true).each do |p|
puts p.user.email
end
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是,这样做,我为每个项目加载整个用户对象,如果有很多项目匹配查询可能会变得非常沉重.那么我该如何只加载电子邮件呢?
我能做到这一点:
User.where(:_id => p.user_id).only(:email).first.email
Run Code Online (Sandbox Code Playgroud)
但这显然打败了简单做法的好语法的目的:
p.user.email
Run Code Online (Sandbox Code Playgroud)
我希望我能写出类似的东西:p.user.only(:email).email但我不能.有任何想法吗 ?
亚历克斯
我们有一个带有嵌入式项目的模型条目:
class Entry
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Spacial::Document
embeds_many :items, cascade_callbacks: true
...
class Item
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Spacial::Document
embedded_in :entry
...
Run Code Online (Sandbox Code Playgroud)
如果我按项目ID直接查询mongo:
{"items._id" : ObjectId("50536b18baa072000f000360")}
Run Code Online (Sandbox Code Playgroud)
它返回条目:
505363b36181ce00020006b1 {"created_at":"2012-09-14T17:04:51Z","items":[{"_ id":"50536b1a2b17b3 ...
然而,当我通过Mongoid查询时:
irb(main):002:0> Entry.where('items._id' => '50536b18baa072000f000360')[0]
=> nil
Run Code Online (Sandbox Code Playgroud)
所有其他查询都有效(对于项目和输入字段的其他字段).但不是为了id.
我们正在运行mongoid(2.4.12).