gpt4 book ai didi

ruby-on-rails - rails 找到 : using conditions while including same table twice via different named associations

转载 作者:行者123 更新时间:2023-12-03 16:14:09 24 4
gpt4 key购买 nike

我有用户发送给其他用户的帖子。有两种模型 - :post 和 :user,并且 :post 具有以下命名关联:

belongs_to :from_user, :class_name => "User", :foreign_key => "from_user_id"
belongs_to :to_user, :class_name => "User", :foreign_key => "to_user_id"

:user 和 :post 都有“is_public”列,表示单个帖子和/或整个用户配置文件可以是公开的或私有(private)的。

我的目标是获取公开的帖子列表,并且其收件人具有公开的个人资料。同时,我想“包括”发件人和收件人信息,以尽量减少数据库调用的数量。挑战在于我通过命名关联有效地“包含”同一个表两次,但在我的“条件”中,我需要确保只按收件人的“is_public”列进行过滤。

我不能执行以下操作,因为“条件”不接受关联名称作为参数:
Post.find(:all, :include => [ :to_user, :from_user ], 
:conditions => { :is_public => true, :to_user => { :is_public => true }})

所以,我可以做到这一点的一种方法是在“用户”表上做一个额外的“加入”:
Post.find(:all, :include => [ :to_user, :from_user ], 
:joins => "inner join users toalias on posts.to_user_id = toalias.id",
:conditions => { :is_public => true, 'toalias.is_public' => true })

有没有更好的,也许更清洁的方法来做到这一点?

提前致谢

最佳答案

我也遇到了同样的问题,看了rails查询生成的sql查询后找到了解决办法,sql查询自动生成别名
试试这个,

Post.find(:all, :include => [ :to_user, :from_user ], 
:conditions => { :is_public => true, 'to_users_posts.is_public' => true })

它对我有用:)

关于ruby-on-rails - rails 找到 : using conditions while including same table twice via different named associations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com