2013-04-09 27 views
0

我有一个拥有has_one关系的对象。更具体地说,这里是关系:如何保护Rails关联(防止覆盖)

class Product < ActiveRecord::Base 
    has_one :domain 
end 

class Domain < ActiveRecord::Base 
    belongs_to :product 
end 

这是一个很基本的关联。然而,我试图找出一些方法来防止一个关联的压倒一切。

比方说,我有一个产品的域名为“google.com”,后面跟着一个试图保存为“google.com”的新产品。我想第二个失败。

关于如何提供此关联验证的任何想法?

回答

0

所以执行我一直在寻找的验证,我不得不添加以下域模型:

before_update :update_test 

def update_test 
    product_id_was.nil? || product_id.nil? 
end 
+0

这表明,也许你的has_one和belongs_to关联是向后的。这里有一个更长的解释:当你回答下面的建议(关于使用验证)时,你说“关联的字段(域)仍然是唯一的......”但是关联的has_one一方不应该有一个域字段。相反,域侧会有一个product_id(如上面的代码所承认的)。如果您改为调换has_one/belongs_to关联的方向,则可以使用正常的验证方法。 – don 2013-04-09 21:34:42

+0

@谢谢您的回复。但请注意一点,如果你仔细想想:一个域名属于某个产品。我是否应该配置关联只是因为它给了我一些验证? – 2013-04-10 14:54:28

0

您正在寻找validates <field>, uniqueness: true

+0

嗯,不知道这个工程。关联的字段(在这种情况下:域)仍然是唯一的,它只是有一个新的关联。 – 2013-04-09 21:09:41

+0

是的,这不起作用 – 2013-04-09 21:22:13