2014-10-14 4 views
0

У меня есть страница, где отображаются сообщения I пользователя:Можно игнорировать метод .where?

user.posts

Я хочу, чтобы добавить функциональность, чтобы показывать только сообщения пользователя определенной категории:

user.posts.where(category_id: category_id_variable)

Чтобы избежать дублирование кода. Интересно, можно ли оставить строку кода выше для и сценариев, то есть каким-то образом игнорировать метод .where, если я хочу отобразить всех нас er?

+1

Если вы хотите сделать только «user.posts» один раз, вы можете сделать «user_posts = user.posts» для всех случаев, тогда в условиях ограничения выполните «user_posts = user_posts.where» (category_id: category_id_variable) '. Вы действительно не можете просто игнорировать «где». С ленивой загрузкой Rails 'user.posts' не является дорогостоящим заявлением. – lurker

+1

Где копировать код? – PericlesTheo

+0

@PNY Теперь я знаю, что вопрос плохо написан. Это (очень) упрощенный запрос того, что у меня есть, и поэтому я (визуально) был бы рад сохранить 3 строки, если мне не нужно дважды писать запрос. – Numbers

ответ

1

На действии вашего контроллера:

posts = user.posts 
@posts = posts.where(category_id: category_id_variable).all if category_id_variable.present? 
@posts = posts.all unless category_id_variable.present? 
0

Что вы ищете называется unscope. В вашем примере кода вы бы сделали user.posts.where(category_id: category_variable).except(:where), чтобы получить тот же результат, что и user.posts.

Для получения более подробной информации см. ActiveRecord query guides.

Смежные вопросы