更改默认的多态类型列名称

时间:2011-05-06 20:45:14

标签: ruby-on-rails ruby ruby-on-rails-3 class polymorphism

我正在使用Ruby on Rails 3,我想更改多态关联使用的默认类型 - 列名称。

例如,如果我有这个类:

class Comment < ActiveRecord::Base
  ...
end

我实现了多态关联,我想使用类型列名称comm_idcomm_type而不是commentable_idcommentable_type < / em>的。 有可能吗?如果是这样,我必须为评论类改变什么?

3 个答案:

答案 0 :(得分:2)

Rails API中没有办法覆盖用于多态关联的默认列名。

请查看this answer以获取可能的解决方案。

答案 1 :(得分:0)

在您的情况下,为什么不将关联更改为:

# Comment
belongs_to :comm, :polymorphic => true

# Everything else
has_many :comments, :as => :comm

答案 2 :(得分:0)

我在旧数据库的rails 6中做到了这一点。这应该适用于> = 4.2.1(see here

的导轨
# booking model
class Booking < ApplicationRecord
  has_many :user_notes, as: :notable, foreign_type: :note_type, foreign_key: :type_id
end
# booking model
# here polymorphic columns are `note_type` and `type_id`
class UserNote < ApplicationRecord
  belongs_to :notable, polymorphic: true, foreign_type: :note_type, foreign_key: :type_id
end