使用整数 ID 类型字段的多态关联

发布于 2024-11-09 18:01:08 字数 349 浏览 3 评论 0原文

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

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

I have a table Foo that has a polymorphic belongs_to association called bar. The foos table has the standard bar_id column. However, instead of a string-based bar_type column, I have an integer bar_type_id column. This column references the id column in the table bar_types. bar_types.name holds the name of the class that represents the class of the particular bar instance.

Does Rails (ideally >=2.3.10) allow for this type of polymorphic association?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冷情 2024-11-16 18:01:08

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

在 config/initializers 目录或任何您喜欢的地方,创建一个文件并定义哈希值
INT_OBJECT_TYPE_TO_CLASSNAME = { 0 =>; INT_OBJECT_TYPE_TO_CLASSNAME = { 0 => “项目”,1 => “任务”, 2 => “时间表”}

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

We did it by overriding the association_class method in a new module and included it using the :extend option. Also created a integer to string mapping hash to make things easier.

In config/initializers directory or anywhere you like, create a file and define the hash
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

In comments.rb

belongs_to :commentable, :polymorphic => true, :extend => CommentObjectType::ClassNamesAsInt
无风消散 2024-11-16 18:01:08

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

belongs_to :actor,              polymorphic: true

为新格式:

belongs_to :actor,              polymorphic: true, integer_type: true

I'm making use of the polymorphic integer type gem, written by one of my co-workers. It's slightly easier to use than the examples given above, in my opinion. For example, after configuring the mapping, you change from:

belongs_to :actor,              polymorphic: true

to the new format:

belongs_to :actor,              polymorphic: true, integer_type: true
不…忘初心 2024-11-16 18:01:08

有两种方法可以实现这一点。

第一个很容易:

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

第二个可能很棘手:

set_inheritance_column :bar_type_id

There are two approaches for this.

First is easy:

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

Second could be tricky:

set_inheritance_column :bar_type_id
独自唱情﹋歌 2024-11-16 18:01:08

我不确定,但你可以玩一下

belongs_to :bar, :class_name => proc{ BarType.find(self.bar_type_id).name }, :foreign_key => :bar_id

I am not sure, but you can play around

belongs_to :bar, :class_name => proc{ BarType.find(self.bar_type_id).name }, :foreign_key => :bar_id
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文