我有一个,当我登录时Users list
,我需要为每个用户放置按钮。follow/unfollow
还有一些其他地方我想使用相同的方法来关注主题/组等。所以我认为最好写一个关联以避免每次我需要这些按钮时进行额外的查询。
我的user_followings
表结构
| id | user_id | recipient_id |
| 1 | 1 | 2 |
| 2 | 3 | 2 |
| 3 | 10 | 3 |
所以这里 id=1 的用户跟随用户 => 2 ...
所以基本上有has_many
关联类型,因为用户正在关注许多其他用户。但是我想出了一个添加has_one
关联类型的想法,我将在其中添加一个附加条件recipient_id=current_user.id
,因此只剩下一条记录并显示以下状态。
如果我成功做到这一点association
,将非常容易通过user.following.nil?
查看查看以下状态,而无需额外的查询、缓存等。
我之前在我的 CakePHP 应用程序中做过一次,SQL 查询如下所示:
ON (`UserFollowing`.`recipient_id` = `User`.`id` AND `UserFollowing`.`user_id` = 1)
但是 CakePHP 允许动态绑定关系,所以我将 session 中的 current_user.id 直接添加到关联条件中。
我不能在 Rails 中这样做,因为我不能放入current_user.id
模型来描述条件:
user.rb
has_one :following, :class_name => 'UserFollowing', :conditions => {:user_id => current_user.id}
方法 Nb。2
也许我可以使用 解决这个问题:through
,但我找不到任何示例来users
从我进行关联的同一张表中获取结果。
方法 Nb。3
是否使用范围Rails 3 设计, current_user 在模型中不可访问?
不确定,哪种方式最好...