2015-03-16 2 views
0

Из-за конкретных результатов, которые я хотел бы сделать, в настоящее время я использую области видимости в своих представлениях. Я знаю, что это, вероятно, не самая лучшая идея, но я честно не знаю, как правильно ее реорганизовать. Поблагодарили бы за любой совет!Избегание использования области в представлениях

Контроллер

@categories = Category.all 

Модели

#post.rb 

scope :published, -> { Post.all.where(published: true).order('created_at DESC') } 

#category.rb 

def published_posts 
    posts.published 
end 

Посмотреть

@categories.each do |category| 
    category.published_posts.each do |post| 
    ... # continue rendering post by post 

, как вы можете видеть, я использую published_posts прямо на мой взгляд. Считаете ли вы, что это нормально, или мне нужно каким-то образом реорганизовать его?

ответ

1

Ну, это зависит. В поле зрения можно назвать область видимости. Это так же хорошо, как вызов метода на объекте. Теперь это зависит от того, как вы хотите выполнить некоторую предварительную обработку сообщений, прежде чем передавать их, чтобы просмотреть или украсить их, тогда вы можете переместить эту логику на контроллер.

Другим примером может быть, предположим, что вы повысили должности, тогда вы хотели бы добавить дополнительные логические записи извлечения и передать их в представления.

В конце дня я хотел бы иметь меньше бизнес-логики во взглядах. Просто передайте данные и отрисуйте их.

0

Более сжатый код будет получен, если вы реорганизуете, удалив помощника и используя область действия напрямую.

category.posts.published.each do |post| 

Использование прицелы в представлениях считается лучшей практики Rails. Clean. Сжатый. Modular.

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