问题标签 [mongoid6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
436 浏览

ruby-on-rails - Rails 5 + Mongoid 虚拟属性

我正在尝试使用 Rails 5 和 Mongoid 制作一个简单的用户注册功能。我的用户模型和控制器如下所示:

用户.rb

users_controller.rb

现在我需要检查 password_confirmation 是否与密码相同,两个参数都是通过请求发送的,但是 password_confirmation 没有传递给新的用户对象,尽管它在强参数中被列入白名单:

日志:

我不想添加

到我的模型,它解决了这个问题。我只需要将属性设为虚拟并在验证后将其删除。我错过了什么或做错了什么?或者对此的正确态度是什么?

0 投票
1 回答
378 浏览

ruby-on-rails - mongoid 'with' 选项的行为随着 >6.0 的变化而改变

让我从我的用例开始。我有两个不同的 mongoid 数据库实例,每个区域都基于类似的模型托管。并且根据用户输入,代码会从我的 rails 应用程序中的各个 mongo 实例中获取结果。我不确定这样做的最佳方法是什么,但是我使用了 Model.with 方法并在 mongoid.yml 中配置了两个客户端。

对于 mongoid <5.0,这很完美。但是,最近我正在升级到 Model.with 现在接受块的 mongoid 6.2,并且我的查询没有产生任何结果。

这是示例代码。

我从下面更改了我的代码(mongoid <5 效果很好)

到 (mongoid >= 6.2)

使用新代码,结果为空。不确定我是否做错了什么。但是,如果只需要一条记录,下面的代码可以正常工作:

如果我的用例有任何其他想法,我将不胜感激。

0 投票
1 回答
32 浏览

mongoid - Mongoid - 检测下一页是否有结果

使用 Mongoid,我如何检查给定limit/results_per_page选项是否有下一页?

假设我的范围是

调用.count将计算所有页面的结果总数。但是如何检测当前页面是否已满/空?或者如果下一页是空的更好?我是否必须通过调用类似的东西来解决范围to_a

0 投票
1 回答
137 浏览

mongoid6 - Mongoid 6 别名字段名

我正在使用 mongoid 5.2 升级 Rails 4.2 应用程序,但升级后我发现options不允许client使用字段名称。

这是我在查看 mongoid 代码并看到此异常后得出的结论:

NameError - 未定义的方法options' for classScheduledReport': mongoid (6.1.1) lib/mongoid/errors/invalid_field.rb:44:in `origin'

有没有办法定义一个字段 :foo 映射到 :options 或数据库中的任何字段?

这是我的模型定义:

提前致谢!

0 投票
1 回答
45 浏览

ruby-on-rails - Rails - 用于发送测试电子邮件和禁用数据库写入的框架

我的网站包含多种类型的客户(例如管理员、经理、市场营销等)

使用 Rails,我被要求向这些人发送测试电子邮件,以便他们可以在自己的电子邮件客户端上预览电子邮件 + 防火墙限制 + 查看电子邮件是否进入促销文件夹。我需要能够向每个用户类型发送一组特定的电子邮件(这样的测试很少,但最终我们公司的任何管理员都应该能够使用前端界面发送测试电子邮件)。

我要做什么,它为每个用户类型编写一个类,这将注册该用户可能在某个时候收到的电子邮件,并在仅构建模式下使用(例如 FactoryGirl)(不写入数据库! !)构建发送电子邮件所需的模型deliver_now(因此我避免了序列化/反序列化问题)。我希望能够在我的真实生产环境中运行这个系统(这样我就可以使用我的真实电子邮件信誉、签名等)

有没有一种简单的方法来禁用数据库写入(所以我确保我的所有示例模型在用于发送电子邮件后都被销毁?)?一个简单的选择是使用只读数据库凭据启动服务器,但也许有一些安全的东西可以避免太多麻烦。

这是我的代码的样子

我的 FactoryGirls 工厂非常混乱,虽然我正在使用这些:build方法,但有些工厂是使用与:create策略的关联来编写的,所以为了确保,我想锁定数据库写入,这样我就可以轻松防止我的数据库上出现不良噪音(我我正在使用 Mongoid,所以我没有简单的事务机制来取消我的所有写入)

0 投票
1 回答
164 浏览

ruby-on-rails - Rails 强制 to_param 返回一些东西,即使没有持久化

我需要处理一个特殊情况,即使用由非持久数据构造的 URL 生成电子邮件视图。

示例:假设我的用户可以创建帖子,并触发帖子创建通知电子邮件,我想向用户发送虚假帖子创建的示例。为此,我正在使用 aFactoryGirl.build(:post)并将其传递给我的PostMailer.notify_of_creation(@post)

在日常的 Rails 生活中,我们url_helpers通过传递模型本身作为参数来使用路由,并且路由生成器会自动将模型转换为它的 ID 以用于路由 URL 生成(在 中article_path(@article),路由助手转换@article@article.id用于构造/articles/:idURL。

我相信它在 ActiveRecord 中是相同的,但无论如何在 Mongoid 中,如果模型没有持久化,这种转换就会失败(这有点好,因为它可以防止生成可能与实际数据不对应的 URL)

因此,在我的特定情况下,由于模型未持久化,URL 生成会崩溃:

崩溃

ActionView::Template::Error: No route matches {:action=>"show", :controller=>"posts", :post_id=>#<Post _id: 59b3ea2aaba9cf202d4eecb6 ...

有没有办法只能在非常特定的范围内绕过这个限制?否则我可以替换所有我resource_path(@model)resource_path(@model.id.to_s)或更好的@model.class.name,但这感觉不是正确的情况......

编辑 :

主要问题是

to_param即使模型没有保留,我也需要强制返回 ID(或其他内容)。现在我正在研究改进,看看我是否可以使用范围猴子补丁,但如果你有更好的想法,请成为我的客人 :-)

但是,在使用我的改进时,我似乎遇到了一个小范围问题,因为这并没有像 url_helpers 预期的那样冒泡。虽然在控制台中使用 te 细化时它工作正常(Foo.new.to_param # => 59b528e8aba9cf74ce5d06c0

0 投票
1 回答
737 浏览

ruby-on-rails - 更新属性错误未知修饰符:$pushAll (9)

当我在我的模型中执行更新属性时update_attributes prod_id: 34978273492,它会返回Unknown modifier: $pushAll (9)

根本原因是什么。TIA

0 投票
1 回答
528 浏览

ruby-on-rails - NameError:类的未定义方法“选项”

当我创建类的实例时,会引发错误 NameError: undefined method 'options' for class 'Product'。

数据库:MongoDB 3.6

宝石:mongoid(6.1.1)

注意:当我将字段名称更改为option或其他任何内容时效果很好,只有选项失败。TIA

0 投票
0 回答
142 浏览

ruby - 从 mLab 检索集合

我在 mLab 上使用 MongoDB 来存储我希望在我的 Ruby 应用程序中显示的棋盘游戏的基本集合。我已经完成了一个使用 Mongoid 在本地实现它的教程,但到目前为止,我无法让它与数据库的 mLab 实例一起使用。

我将此添加到我的 mongoid.yml 文件中

配置文件中自动生成的其他选项,我留空(默认)。

我想从终端了解这两行:


我没有收到任何错误,但也没有返回任何文件,并且生成的 index.html 是空白的......

谁能解释这两行中的第一行 MONGODB | ...对我来说,或者至少确认我的以下假设是否正确?特别是链的最后一部分,这是否告诉我过滤结果为空?



在我的控制器中的评论中@tfogo 的建议后更新:

这会在控制台中生成以下空 Log 语句:

0 投票
1 回答
115 浏览

mongodb - 如何使用 Mongoid 7.x 和 MongoDB 3.x 重命名集合

我有一个使用 Ruby 2.2.2 的测试应用程序,并且正在使用 Mongoid 7.0.0 和 Moped 1.5.3 和 MongoDB 3.6.2 - 我们正在使用 Mongoid 4.x 和 MongoDB 2.6 升级一个古老的代码库,并在API 一路走来

最严重的是我们曾经能够做 SomeModel.collection.rename 但是这个 API 方法现在不再存在(据我所知)并给出一个未定义的错误

我还尝试了以下方法:

然而这会返回

但是,从命令外壳中,我可以发出:

这很有效——这似乎是我所看到的唯一的最后手段,我将如何将其作为助力车命令发出?(我对语法方案不太熟悉)

还有,这么看似简单的操作,有什么理由显然没有被 Mongoid 曝光?