Ruby on rails Rails有条件地计算子模型
因此,我有一个应用程序,其中一个用户有许多帖子。这些帖子可以发表,也可以起草。我通过枚举进行了此设置,如下所示:Ruby on rails Rails有条件地计算子模型,ruby-on-rails,ruby,enumeration,Ruby On Rails,Ruby,Enumeration,因此,我有一个应用程序,其中一个用户有许多帖子。这些帖子可以发表,也可以起草。我通过枚举进行了此设置,如下所示: class User < ActiveRecord::Base has_many :posts end class用户,或类似的东西。您可以在代码< >用户< /代码>中考虑 PASSSCOUNT < /代码>的字段,并且如果您经常查找这个号码,请跟踪该号码。试试这个。code>@bloggers=User.joins(:posts).where(posts:{publi
class User < ActiveRecord::Base
has_many :posts
end
class用户
邮政模式:
class Posts < ActiveRecord::Base
belongs_to :user
enum draft_status: [:draft, :published]
end
class Posts
我想设置一个控制器变量,该变量只返回拥有任何已发布片段的用户。如何设置这样的变量
我试过:
@bloggers=User.all.where('posts.published.any?=',true)
这根本不知道我该如何定义它?您可以使用它,例如:
@bloggers = User.where(id: Post.published.uniq.pluck(:user_id))
您可以使用此选项,例如:
@bloggers = User.where(id: Post.published.uniq.pluck(:user_id))
<代码> @ BooGrs=用户。在哪里(ID:POST.Pux.Unq.Pulk(:UsSuid))< /C> >,或类似的东西。您可以在代码< >用户< /代码>中考虑<代码> PASSSCOUNT < /代码>的字段,并且如果您经常查找这个号码,请跟踪该号码。试试这个。code>@bloggers=User.joins(:posts).where(posts:{published:true})@sergio有效@vishal我尝试了类似的方法,当我完全尝试时,它给了我一个PG Undefined列错误。
@bloggers=User.where(id:Post.published.uniq.pulk(:User_id))
,或者类似的东西。你可以在代码< >用户< /代码>中考虑一个字段,用于<代码> PsxsCuth[@bloggers=User.joins(:posts).where(posts:{published:true})@sergio有效@vishal我尝试了类似的方法,当我完全尝试时,它给了我一个PG Undefined列错误。顺便说一句,uniq在这里可以避免。当我们在where
子句中使用数组时,ActiveRecord会处理它。@RohitJangid:它会使数组生成更加高效(将生成SELECT DISTINCT
query)。如果我们避免uniq,它将只是简单的sql查询。如果我们使用uniq
,那么它将增加运行时间,因为它将从数据库中获取所有数据(sql操作),使其成为uniq(ruby操作),然后获取用户id。因此,在我看来,避免使用uniq将提高效率。@RohitJangid:我建议您在控制台中实际运行这些查询并观察结果sql。您是否完全错过了我关于selectdistinct
的评论?顺便说一句,这里可以避免使用uniq
。当我们在where
子句中使用数组时,ActiveRecord会处理它。@RohitJangid:它会使数组生成更加高效(将生成SELECT DISTINCT
query)。如果我们避免uniq,它将只是简单的sql查询。如果我们使用uniq
,那么它将增加运行时间,因为它将从数据库中获取所有数据(sql操作),使其成为uniq(ruby操作),然后获取用户id。因此,在我看来,避免使用uniq将提高效率。@RohitJangid:我建议您在控制台中实际运行这些查询并观察结果sql。您是否完全错过了我关于选择distinct
的评论?