0

私はいくつかのアプリに取り組んでいます。ユーザーが他のユーザーや投稿を報告できるように、ユーザー、投稿、レポートのモデルがあります。だから私はこれをしました:

class Report < ActiveRecord::Base
  belongs_to :user
  belongs_to :reportable, :polymorphic => true
  ...

class User < ActiveRecord::Base
  has_many :reports, :dependent => :destroy
  has_many :reported_users, :through => :reports, :source => :reportable, :source_type => 'User'
  has_many :reported_posts, :through => :reports, :source => :reportable, :source_type => 'Post'
  has_many :reports, :as => :reportable, :dependent => :destroy
  ...

class Post < ActiveRecord::Base
  has_many :reports, :as => :reportable, :dependent => :destroy
  ...

そして私のユーザースペックは次のようになります:

it 'reports another user' do
  @reporter = FactoryGirl.create(:user)
  @reported = FactoryGirl.create(:user)
  Report.create!(:user => @reporter, :reportable => @reported)
  Report.count.should == 1
  @reporter.reported_users.size.should == 1
end

そして、私は次のようなエラーが発生します:

User reports another user
Failure/Error: @reporter.reported_users.size.should == 1
  expected: 1
       got: 0 (using ==)

何が悪いのかわからないのですが、モデルhas_many :reportsで一緒に使用できますか?has_many :reports, :as => :reportableまた、ユーザーのレポーターを取得するにはどうすればよいですか?@user.reporters特定のユーザーを報告した他のすべてのユーザーを取得する必要があるとしましょう。

4

1 に答える 1

0

has_many :reports秒を変更しhas_many :inverse_reportsて問題を解決しました:

class User < ActiveRecord::Base
  has_many :reports, :dependent => :destroy
  has_many :reported_users, :through => :reports, :source => :reportable, :source_type => 'User'
  has_many :reported_posts, :through => :reports, :source => :reportable, :source_type => 'Post'
  has_many :inverse_reports, :class_name => 'Report', :as => :reportable, :dependent => :destroy

これで、次のような各ユーザーのレポーターも取得できると思います。

  has_many :reporters, :through => :inverse_reports, :source => :user
于 2012-06-04T12:50:44.687 に答える