Динамическое имя класса для отношений has_many - PullRequest
7 голосов
/ 15 июня 2010

Я пытаюсь установить связь has_many с динамическим атрибутом class_name

class Category < ActiveRecord::Base
  has_many :ads, :class_name => ( lambda { return self.item_type } ) 
end

или

class Category < ActiveRecord::Base
  has_many :ads, :class_name => self.item_type
end

Но я получил ошибки:

can't convert Proc into String

или

undefined method `item_type' for #<Class:0xb62c6c88>

EDIT У меня есть два разных типа объявлений

LeaseAd, RentAd они реализованы с использованием наследования одной таблицы

Тогда у меня есть Category объявлений в виде вложенного набора. Я бы хотел уточнить, какой тип рекламы относится к объекту Category.

Спасибо за любую помощь!

Ответы [ 2 ]

5 голосов
/ 20 ноября 2012

Вы можете попробовать

def items
  item_type.constantize.where(category_id: id)
end
3 голосов
/ 15 июня 2010
can't convert Proc into String

означает, что рельсы ожидают строку

undefined method `item_type' for #<Class:0xb62c6c88>

означает, что вы не определили item_type для Class -объекта

Я верю в то, что вы хотитездесь это невозможно.

Я бы использовал что-то вроде однократного наследования для объявлений и их подтипов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...