Rails验证了唯一性交叉模型

时间:2015-08-24 17:09:08

标签: ruby-on-rails

我有两个模型:event.rbbag.rb 事件具有名为slug的属性,并且包具有名为bag_code的属性。

我根据bag_code属性生成视图。例如。如果行李代码是" 4711"我根据该代码加载记录。

现在,在某些情况下,用户可以在事件中定义slug URL,在这种情况下,它应该覆盖行李代码。 我不想要的是用户可以选择slug,其值已经是bag_code(在这种情况下,应该禁止选择slug" 4711&# 34;)因为这会在我的视图中引起麻烦,所以它必须在两个模型属性中唯一

我试图通过范围解决这个问题

validates_uniqueness_of :slug, scope: [:bag_code]

但这只适用于同一型号。

我的模型之间的关联是:

event.rb

has_many :bags

1 个答案:

答案 0 :(得分:1)

自定义验证方法适用于此情况。以下是设置方法:

<强> event.rb

validates :slug, uniqueness: true
validate :slug_is_unique_from_bag_codes

private

def slug_is_unique_from_bag_codes
  if Bag.find_by bag_code: slug
    errors.add :base, "The slug is already being used as a bag code"
  end
end