Это зависит от запроса, который вам нужно выполнить.Если это просто where
, вы можете передать хеш с where
параметрами:
def get_article_restrictions(privacy_level)
case privacy_level
when 0
{ "articles.user_id": @authenticated_user.id }
when 1
{ param1: value1, param2: value2 }
when 2
{ param3: value3, param4: value4 }
end
end
def display_articles
privacy_level = get_article_restrictions(params[:privacy_level])
@articles = Article.includes(:user).where(privacy_level)
end
Я бы предложил сделать это наоборот: передать область видимости методу:
def fetch_articles(scope, privacy_level)
case privacy_level
when 0
scope.where("articles.user_id": @authenticated_user.id)
when 1
scope.where(param1: value1, param2: value2)
when 2
scope.where(param3: value3, param4: value4)
end
end
def display_articles
@articles = fetch_articles(Article.includes(:user), params[:privacy_level])
end
Я бы также предложил перевести fetch_articles
в режимы, так как вызов методов активной записи (например, where
) вызывает слишком сильную связь и усложняет тестирование.