如何检查查询中是否有任何结果并添加if / else条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查查询中是否有任何结果并添加if / else条件相关的知识,希望对你有一定的参考价值。

在我的home_controller中,我必须显示几个列表。

我有这个:

  def subscriptions
    @movies = current_user.followed_movies
                         .limit(12)
                         .order('movies.last_news DESC NULLS LAST').decorate  
  end

  def watched
    @movies = current_user
             .watched_movies
             .order_by_watched_date
             .limit(12).decorate
  end

我想在def订阅中添加一个if条件。例如

  def subscriptions
    @movies = if this query has no results... current_user.followed_movies
                         .limit(12)
                         .order('movies.last_news DESC NULLS LAST').decorate
               else
                  to show the movies in the def watched
               end 
 end

怎么做?

答案

我们可以创建范围,但为了简单起见,可以创建两个单独的方法,如下所示:

def movies_followed
   current_user.followed_movies
end

def movies_watched
   current_user.watched_movies
end

然后我们可以在下面的def subscriptions中使用这两种方法,如下所示:

def subscriptions
   @movies = 
       if movies_followed
          movies_followed.limit(12).order('movies.last_news DESC NULLS LAST').decorate
       else
          movies_watched.order_by_watched_date.limit(12).decorate
       end
end

希望,它符合您的要求......

另一答案

目前尚不清楚你究竟想要什么,但我认为你的意思是:

“如果订阅查询为空,请改为使用观察的查询”。

我可能会这样做:

def set_movies
  @movies = subscriptions
  @movies = watched if subscriptions.empty?
  @movies = @movies.limit(12).decorate
end

def subscriptions
  current_user.followed_movies.order_by_last_news
end

def watched
  current_user.watched_movies.order_by_watched_date
end

然后在user.rb中我可能会添加:

scope :order_by_last_news, -> { order('movies.last_news DESC NULLS LAST') }

以上是关于如何检查查询中是否有任何结果并添加if / else条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java Jersey REST服务中强制使用queryparams?

sql 用于检查IF结果的SQL查询是否存在ELSE

如何使用ostream_iterator检查copy_if是不是为范围内的任何内容返回true?

Room:如何检查行是不是存在

如何检查当前行是不是是sql查询中最后选择的行?

在 NodeJS 中检查查询结果?