Полиморфизм по модели ActiveRecord - PullRequest
0 голосов
/ 04 марта 2010

У меня есть две модели, скажем, Product и Bundle.

таблица продуктов связана с таблицей product_prices и связками с bundle_prices (необходимо сделать это разделение для поддержки нескольких валют)

Очевидно, что и Product, и Bundle используют несколько похожих методов, таких как get_price

Я сделал так, чтобы Product и Bundle указывали на абстрактный класс для этого, скажем, SellableItem.

Так что теперь у меня есть:

Класс Product

класс Bundle

класс SellableItem

У меня вопрос, например, как мне добавить функцию в SellableItem, например, как эта?

def get_price(currency = '')
  #get from bundle_prices if object is Bundle or product_prices if object is Product
end

Любая помощь высоко ценится

Ответы [ 2 ]

0 голосов
/ 04 марта 2010

Почему бы не определить модуль GetPrice с помощью этого метода


module GetPrice
  def get_price(currency = '')
    send("#{self.class.to_s.downcase}_prices")
  end
end

0 голосов
/ 04 марта 2010

Ну, таким же образом вы можете определить метод в SellableItem и реализовать его в Product и Bundle, который будет возвращать тип ассоциации, который вам нужен

class Product 
  def prices_association
    :product_prices
  end
end

class Bundle 
  def prices_association
    :bundle_prices
  end
end

, а затем

def get_price(currency = '') 
  self.send(prices_association).find(:conditions => ...)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...