как проверить, есть ли какие-либо результаты в запросе и добавить условие if / else - PullRequest
1 голос
/ 06 апреля 2019

в моем 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

Я хочу добавить условие if в def подписки. Например

  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

Как это сделать?

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

не совсем понятно, что именно вы ищете, но я думаю, что вы имеете в виду:

"если запрос на подписку пуст, используйте вместо этого просматриваемый запрос".

Я бы, наверное, сделал это так:

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') }
0 голосов
/ 07 апреля 2019

Мы можем создавать области, но для простоты можно создать два отдельных метода, как показано ниже:

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

Надеюсь, это соответствует вашим требованиям ...

...