在使用这种复杂的双重关联时,如何编码检索记录?

时间:2013-08-07 05:51:19

标签: ruby-on-rails ruby-on-rails-3

我有2个模型,例如UserTracking

Tracking模型有以下6列

  • ID
  • USER_ID
  • target_user_id
  • accessed_at
  • created_at
  • 的updated_at

此模型的目标是知道谁访问了我的users/show.html.erb页面。

每个用户都想知道谁看了我的页面。

如何在UserTracking型号中建立关联?

是这样的吗?

模型/ user.rb

has_many: trackings

模型/ tracking.rb

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

毕竟,
current_user.tracking.target_user显示current_user访问的用户?

然后我如何检索访问current_user的跟踪记录? 在这种情况下我该如何编码?

2 个答案:

答案 0 :(得分: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

从跟踪中访问用户

答案 1 :(得分:1)

首先,您的accessed_at列是多余的,您只需将其委托为:

delegate :accessed_at, to: :created_at

<强>模型/ 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