2011-04-04 4 views
2

У меня есть две моделинабор проверка ложна на ассоциацию Mongoid

class Person 
    embeds_one :address 
end 

class Address 
    embedded_in :person 
    field :city 
    validates :city, :presence => true 
end 

Теперь, когда я

person.address = Address.new 

проверка адреса называется. Но мне не нужна проверка в моем случае, и я не могу удалить :validates из адреса (потому что мне это нужно позже). Я хочу сделать что-то вроде (:validate => false). Если у кого-нибудь есть идея, дайте мне знать! Я использую mongoid-2.0.0.

ответ

1

Вы можете использовать

person.address = Address.create 

то проверка не называется я считаю. Когда вы обновляете запись и, наконец, сохраняете ее, вызывается валидация. Также можно использовать что-то вроде

person.address = Address.new :addres => "Valid address" 

и проверка не удастся.

Включение и выключение проверки, кажется мне странным, так как это приводит к недействительным адресам в базе данных ... Вы можете изменить свою процедуру проверки, чтобы принимать пустые адреса, а также, если такие адреса являются проблемой.

+1

Это идентификатор не работает, я попробовал первый вариант, и я получил это ошибка "Доступ к коллекции для адреса не допускается, поскольку он является встроенным документом, пожалуйста, обращайтесь к коду из корневого документа ". Я также попробовал второй вариант, но не работал. На самом деле мне нужно сохранить промежуточный адрес, прежде чем сохранять конечный адрес. Вот почему я пытаюсь отключить проверку. –

+0

Ваша ошибка встречается в Интернете много раз, и, похоже, это проблема с мангией, см. Также этот вопрос: http://stackoverflow.com/questions/5069315/how-to-fabricate-mongoid-document-with -embedded-document-using-fabrication – Veger

+1

да, это для embeds_many, но я не нашел ошибок с embeds_one .... также встроенный документ сохраняется, но ошибки все еще отображаются. –

0

Как создать собственный валидатор адресов и проверить его, является ли это новой записью. если это так, то оно все еще действует с пустым электронным письмом?