0

Ruby onRailsv3.2.2を使用しています。私は、このように、関連付けにalias_method使用される次の関連付けを持っています:has_many :through

class Resource < ActiveRecord::Base
  has_many :article_associations
  alias_method :post_associations, :article_associations

  has_many :users, :through => :post_associations
end

実行する@article.usersと、次のエラーが発生します。

ActiveRecord::HasManyThroughAssociationNotFoundError
Could not find the association :post_associations in model Article

なぜそれが起こるのですか?期待どおりに機能させる方法はありますか?つまり@article.users、「エイリアス」を適切に通過する方法は:post_associations


:関連付けを「動的に構築」(つまり、メタプログラミング)しようとしているため:post_associations、ステートメントで「状態」/「使用」したいと思います。has_many :users, :through => :post_associationshas_many :through


RubyonRailsフレームワークトレースは次のとおりです。

activerecord (3.2.2) lib/active_record/reflection.rb:501:in `check_validity!'
activerecord (3.2.2) lib/active_record/associations/association.rb:26:in `initialize'
activerecord (3.2.2) lib/active_record/associations/collection_association.rb:24:in `initialize'
activerecord (3.2.2) lib/active_record/associations/has_many_through_association.rb:10:in `initialize'
activerecord (3.2.2) lib/active_record/associations.rb:157:in `new'
activerecord (3.2.2) lib/active_record/associations.rb:157:in `association'
activerecord (3.2.2) lib/active_record/associations/builder/association.rb:44:in `block in define_readers'
...
4

2 に答える 2

3

関連付けに alias_method という名前を付ける必要がある理由がわかりません。

代わりに、このようなことを直接行うことができます。

class Resource < ActiveRecord::Base
  has_many :post_associations, :foreign_key => :resource_id, :class_name => "ArticleAssociation"
  has_many :users, :through => :post_associations
end

別の解決策

class Resource < ActiveRecord::Base
  has_many :article_associations
  has_many :users, :through => :article_associations
end

def post_associations
  self.article_associations
end

このいずれかを行う必要があります

resource.post_associations

また

resource.article_associations
于 2012-10-13T12:18:15.130 に答える
0

ポリモーフィックな関連付けを達成しようとしているようです。

于 2012-10-13T12:24:26.830 に答える