小编Ben*_*cia的帖子

更有效的 Rails 方法来检查三个字段中的任何一个是否唯一?

因此,我需要在创建对象之前(从表单)检查三个字段的唯一性,但只要三个字段中的任何一个是唯一的,我就会创建对象。

我的第一个想法是将参数从控制器传递给模型,然后运行查询以检查具有这三个字段的查询是否返回 > 0 个文档。但是,我后来了解到这是一种危险的方法,不应使用。

所以我检查了文档,并基于这个片段

Or even multiple scope parameters. For example, making sure that a teacher can only be on the schedule once per semester for a particular class.

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, scope: [:semester_id, :class_id]
end
Run Code Online (Sandbox Code Playgroud)

我以为我找到了答案,并实施了:

validates_uniqueness_of :link_to_event, :scope => [:name_of_event, :date_of_event]
Run Code Online (Sandbox Code Playgroud)

哪个有效!但是,这个数据集会变得非常大(不仅仅是这个表单,哈哈),我的印象是,通过这个实现,Rails 将查询所有带有 link_to_event 的字段,然后所有带有name_of_event,然后是带有 date_of_event 的所有字段。所以,我的问题是:

A) Rails 将如何实现这一点我错了吗?开箱即用会更有效率吗?

B)如果这对于具有几百万个条目的表来说效率不高,是否有更好(并且仍然很笨拙)的方法来做到这一点?

ruby-on-rails mongoid

2
推荐指数
1
解决办法
57
查看次数

标签 统计

mongoid ×1

ruby-on-rails ×1