У меня есть класс с именем Post, и мне нужно, чтобы иметь возможность учесть следующие сценарии:Обработка несколько фильтров (PARAMS) чисто в контроллере
- Если пользователь выбирает категорию, показывать только сообщения из этой категории
- Если пользователь выбирает тип, показывать только сообщения с этим типом
- Если пользователь выбирает категорию и типа, показывать только сообщения из этой категории с этим типом
- Если пользователь не выберет ничего, показать все сообщения
Мне интересно, неизбежно ли, что мой контроллер будет выглядеть грубым с тонны условностей ... вот мой неправильный подход к решению этого вопроса - кто-нибудь знает, как я могу это сделать?
class PostsController < ApplicationController
def index
@user = current_user
# If a user has not specified a type or category,
# show them everything
@posts = Post.all
# If a user has selected a category, but no type, only
# show posts from that category.
if params[:category] && !params[:type]
category = Category.find(params[:category])
@posts = @category.posts
end
# If a user has selected a category and a type, only show
# posts from that category with that type
if params[:category] && params[:type]
category = Category.find(params[:category])
type = params[:type]
@posts = category.posts.where(post_type: type)
end
# If a user has selected a type but not a category, show all
# of the posts with that type
if params[:type] && !params[:category]
type = params[:type]
@posts = Post.where(post_type: post_type)
end
end
end
Cheezus! Это определенно образец, который мы должны использовать. – goo