has_many关系的动态class_name

时间:2010-06-15 12:51:08

标签: ruby-on-rails ruby activerecord orm

我正在尝试与动态class_name属性

建立has_many关系
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>

修改 我有两种不同类型的广告

LeaseAdRentAd他们使用单表继承实现

然后我将Category个广告作为嵌套广告。我想说明哪种类型的广告属于Category对象。

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

你可以尝试

def items
  item_type.constantize.where(category_id: id)
end

答案 1 :(得分:3)

can't convert Proc into String

表示rails期待String

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

表示您没有为item_type - 对象

定义Class

我相信你想要的东西是不可能的。

我会为广告及其子类型使用单一表继承。