#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 определения. 😀