0

と のような 2 つのモデルがUserあります。Tracking

Trackingモデルには、以下の 6 つの列があります

  • ID
  • ユーザーID
  • target_user_id
  • access_at
  • created_at
  • updated_at

このモデルの目的は、誰が私のusers/show.html.erbページにアクセスしたかを知ることです。

各ユーザーは、誰が私のページを見たのかを知りたがっています。

UserTrackingモデルの両方で関連付けを行うにはどうすればよいですか?

このようなものですか?

models/user.rb

has_many: trackings

models/tracking.rb

belongs_to: user
belongs_to: user, :foreign_key => "target_user_id", :class_name => "TargetUser"

結局、
current_user.tracking.target_usercurrent_user がアクセスしたユーザーを表示しますか?

では、current_user にアクセスした追跡記録を取得するにはどうすればよいでしょうか。この場合、どのようにコーディングできますか?

4

2 に答える 2

1

あなたのプロジェクトには "TargetUser" という名前のクラスはありません。 :class_nameオプションは、関連付けを設定するモデルの名前を指定することです

models/tracking.rbで、コードを次のように変更します。

belongs_to: user
belongs_to: target_user, :foreign_key => "target_user_id", :class_name => "User"

その後、tracking.target_user によって追跡からユーザーにアクセスできます

于 2013-08-07T06:07:36.067 に答える
1

まず、accessed_at列は冗長です。次のように簡単に委任できます。

delegate :accessed_at, to: :created_at

models/tracking.rb

belongs_to: tracked_user, foreign_key:  'target_user_id', class_name: 'User'

次に、それをトラバースします。

current_user.trackings.each do |t|
  puts t.tracked_user_id
end
于 2013-08-07T06:29:23.447 に答える