как проверить, есть ли какие-либо результаты в запросе, и добавить условие if / else

#ruby-on-rails #ruby-on-rails-4

#ruby-on-rails #ruby-on-rails-4

Вопрос:

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

Как сделать?

Ответ №1:

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

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

Я бы, вероятно, сделал это следующим образом:

 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') }
  

Ответ №2:

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

 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
  

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

Комментарии:

1. limit(12).decorate может быть добавлено после.

2. Я использовал вашу систему. даже если сейчас у меня 3 определения. 😀