我有一个1比1的关联之间的2个蒙哥大模型和我不断得到重复,即有多个子记录(卡)与相同的parent_id(即用户)。我已经尝试过验证belongs_to关联的唯一性,如下所示,但是它不起作用。
class User
include Mongoid::Document
field :name, type: String
has_one :card
end第二种模式:
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发布于 2015-08-04 23:22:45
语法更简单。您只想确保没有两个具有相同user_id的文档。
class Card
belongs_to :user
validates_uniqueness_of :user如果需要n个字段的元组的唯一性,则需要使用作用域。例如,如果用户每年最多可以拥有一张卡,则可以编写
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中的对象相比所做的更改。
https://stackoverflow.com/questions/31815035
复制相似问题