Rails 3: доступ к родительскому объекту из полиморфной модели рельсов?

У меня полиморфная ассоциация - "адрес" (относится к "адресуемым").

Среди прочего, он обслуживает «магазинную» модель.

Я пытаюсь добавить проверку validates_presence_of, когда и только тогда, когда адрес имеет addressable_type "shop", а соответствующий объект "shop" имеет "shop_type = 'commercial'

Проблема в том, что я не могу получить доступ к моему родительскому объекту «магазин» из модели адреса, что означает, что я не могу получить shop_type и, следовательно, не могу установить проверку. Любые предложения о том, как это сделать?

Вот пример того, что я (думаю) хочу делать. Я не уверен, что это правильное решение, но я подозреваю, что все, что мне нужно, это выяснить вызов "GET_SHOP_TYPE_HERE"... предполагая, что это возможно. Ваше здоровье

# app/models/address.rb

with_options :if => lambda { |address| address.addressable_type == 'Shop')} do |model|
  model.validates_presence_of :street_address, :suburb, :post_code, :address_state, :latitude, :longitude unless is_commercial_shop?
end

def is_commercial_shop?
  <GET_SHOP_TYPE_HERE> == 'commercial'
end

person PlankTon    schedule 06.07.2011    source источник
comment
Пожалуйста, покажите, как определяются отношения от магазина к адресу.   -  person nathanvda    schedule 25.07.2011


Ответы (1)


Я мог бы неправильно понять, что вам нужно, но я бы попытался сделать:

validate_presence_of :your_attribute, :if => has_condition?

def has_condition?
  # whatever code that tells you to validate or not
end

Надеюсь это поможет!

person Dominic Goulet    schedule 06.07.2011