首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongoid-4如何在1到1的关联中验证belongs_to的唯一性

mongoid-4如何在1到1的关联中验证belongs_to的唯一性
EN

Stack Overflow用户
提问于 2015-08-04 16:53:26
回答 1查看 530关注 0票数 0

我有一个1比1的关联之间的2个蒙哥大模型和我不断得到重复,即有多个子记录(卡)与相同的parent_id(即用户)。我已经尝试过验证belongs_to关联的唯一性,如下所示,但是它不起作用。

代码语言:javascript
复制
 class User
   include Mongoid::Document
   field :name, type: String 
   has_one :card
 end

第二种模式:

代码语言:javascript
复制
 class Card
   include Mongoid::Document
   field :name, type: String 
   belongs_to :user

   validates :user, :uniqueness => {:scope => :user_has_child}

   def user_has_child
     q = Segment.where(drop_id: {'$ne' =>  nil})
     s = q.map(&:drop_id)
     errors.add(:drop_id, "this user already has a card") if s.include?(:drop_id)
   end

 end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 23:22:45

语法更简单。您只想确保没有两个具有相同user_id的文档。

代码语言:javascript
复制
class Card
  belongs_to :user

  validates_uniqueness_of :user

如果需要n个字段的元组的唯一性,则需要使用作用域。例如,如果用户每年最多可以拥有一张卡,则可以编写

代码语言:javascript
复制
class Card
 field :year
 belongs_to :user  

 validates_uniqueness_of :user, scope: [:year] # A user can have one card per year

注意,当您保存模型时,验证是适用的。你试着保持这些变化。如果某些验证失败,调用.save将返回true或false,但是内存中的对象总是被修改为!因此,例如,您可以在HTML输入字段中显示以前的值,这样用户就知道他写了什么并能够修复它(否则,他将不得不重写所有信息,以防出现一个错误)。

另外,默认情况下,Mongoid处理脏跟踪。 (这是版本5.0的文档,但对于Mongoid4来说是一样的)。也就是说,您可以对内存中的对象调用.changed? .changes, etc,以查看与DB中的对象相比所做的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31815035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档