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

+0

@don благодарит за ответ. Одно замечание, если вы думаете об этом: домен принадлежит продукту. Должен ли я настраивать ассоциации только потому, что он дает мне определенные подтверждения? –

0

Вы ищете validates <field>, uniqueness: true.

+0

Хм, не уверен, что это работает. Связанное поле (в данном случае: домен) по-прежнему уникально, оно просто имеет новую ассоциацию. –

+0

Да, это не работает –