has_many关系的动态class_name

voo*_*ooD 7 ruby orm activerecord ruby-on-rails

我正在尝试与动态class_name属性建立has_many关系

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

要么

class Category < ActiveRecord::Base
  has_many :ads, :class_name => self.item_type
end
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

can't convert Proc into String
Run Code Online (Sandbox Code Playgroud)

要么

undefined method `item_type' for #<Class:0xb62c6c88>
Run Code Online (Sandbox Code Playgroud)

编辑 我有两种不同类型的广告

LeaseAd,RentAd他们使用单表继承实现

然后我有Category广告作为嵌套集.我想指定哪种类型的广告属于Category对象.

感谢您的任何帮助!

小智 5

你可以试试

def items
  item_type.constantize.where(category_id: id)
end
Run Code Online (Sandbox Code Playgroud)


jig*_*fox 4

can't convert Proc into String
Run Code Online (Sandbox Code Playgroud)

意味着 Rails 需要一个字符串

undefined method `item_type' for #<Class:0xb62c6c88>
Run Code Online (Sandbox Code Playgroud)

意味着您没有item_type为Class-object定义

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

我会为广告及其子类型使用类似单表继承的东西。