1

私は次のものを持っています:

belongs_to :type, :class_name => :activity_type
belongs_to :activity_type # needed for has_one :through?
has_one :category, :through => :activity_type, :class_name => :activity_category

「activity_type」の代わりに「type」を使用して、この「has_one through」関係を行う方法はありますか?

編集:これは機能していませんでした。「タイプ」という魔法の言葉のおかげで見れませんでした。

私が今持っているのはこれです:

  belongs_to :company
  belongs_to :type, :class_name => 'ActivityType', :foreign_key => 'activity_type_id'
  has_one :category, :through => :type, :class_name => 'ActivityCategory', :foreign_key => 'activity_category_id'

しかし、それは失敗します

  no such column: activity_types.category_id

予想される列は「activity_types.activity_category_id」になるため、これは正しいです。どうすれば修正できますか?

4

1 に答える 1

2

関連付けを間違った方法で使用しています。まず、through:thenを使用する場合はclass_nameforeign_key が省略されます。だから、これが期待している理由category_idです。また、モデルに関連付けがたくさんあると、モデルが混乱して理解しにくくなるため、デフォルトオプションを書き換えて関連付けをオーバーロードしないでください。したがって、おそらくそれを次のように記述し、belongs_to :activity_type自分に最も適した名前を追加する必要がありますalias_method :type, :activity_type

要するに、これは私があなたに提案しているものです:

belongs_to :company
belongs_to :activity_type
has_one :activity_category, :through => :activity_type

alias_method :type, :activity_type
alias_method :category, :activity_category
于 2013-01-27T18:27:28.273 に答える