10

Fooと呼ばれるポリモーフィックな belongs_to 関連付けを持つテーブルがありますbarfoos表には標準の列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

コメント.rbで

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

私は、同僚の 1 人が作成した多形整数型gem を使用しています。私の意見では、上記の例よりも少し使いやすいです。たとえば、マッピングを構成した後、次のように変更します。

belongs_to :actor,              polymorphic: true

新しい形式に:

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

わかりませんが、遊んでください

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