2013-04-09 33 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