Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails有条件地计算子模型_Ruby On Rails_Ruby_Enumeration - Fatal编程技术网

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
的评论?