10

我有一个表Foo,它有一个名为的多态 belongs_to 关联bar。该foos表具有标准bar_id列。bar_type但是,我有一个整数列,而不是基于字符串的bar_type_id列。此列引用id表中的列bar_types。保存代表特定实例bar_types.name的类的类的名称。bar

Rails(理想情况下 >=2.3.10)是否允许这种类型的多态关联?

4

4 回答 4

11

我们通过association_class在一个新模块中覆盖该方法并使用该:extend选项包含它来做到这一点。还创建了一个整数到字符串的映射哈希以使事情变得更容易。

config/initializers目录或您喜欢的任何地方,创建一个文件并定义哈希 INT_OBJECT_TYPE_TO_CLASSNAME = { 0 => "Project", 1 => "Task", 2 => "Timesheet" }

class CommentObjectType < ActiveRecord::Base
  module ClassNamesAsInt
    def association_class
      return INT_OBJECT_TYPE_TO_CLASSNAME[restricted_object_type].constantize
    end
  end
end

在comments.rb

belongs_to :commentable, :polymorphic => true, :extend => CommentObjectType::ClassNamesAsInt
于 2012-02-04T06:03:46.720 回答
2

我正在使用由我的一位同事编写的多态整数类型gem。在我看来,它比上面给出的例子更容易使用。例如,配置映射后,您将更改为:

belongs_to :actor,              polymorphic: true

到新格式:

belongs_to :actor,              polymorphic: true, integer_type: true
于 2013-11-05T17:11:43.823 回答
0

有两种方法。

首先很简单:

has_many :bars, :conditions => "whatever you want"

第二个可能很棘手:

set_inheritance_column :bar_type_id
于 2011-05-25T21:47:31.377 回答
0

我不确定,但你可以玩

belongs_to :bar, :class_name => proc{ BarType.find(self.bar_type_id).name }, :foreign_key => :bar_id
于 2011-05-25T21:48:37.993 回答