Ruby on Rails Жирная модель, тощий контроллер


пример

«Fat Model, Skinny Controller» относится к тому, как M и C части MVC идеально работают вместе. А именно, любая логика, не связанная с ответом, должна идти в модели, в идеале, в хорошем, проверяемом методе. Между тем, «худой» контроллер - просто приятный интерфейс между представлением и моделью.

На практике это может потребовать множество различных типов рефакторинга, но все сводится к одной идее: путем перемещения любой логики, которая не связана с ответом модели (вместо контроллера), не только вы продвигаете повторное использование где это возможно, но вы также смогли проверить свой код вне контекста запроса.

Давайте посмотрим на простой пример. Скажем, у вас есть такой код:

def index
  @published_posts = Post.where('published_at <= ?', Time.now)
  @unpublished_posts = Post.where('published_at IS NULL OR published_at > ?', Time.now)
end

Вы можете изменить его на это:

def index
  @published_posts = Post.published
  @unpublished_posts = Post.unpublished
end

Затем вы можете переместить логику в свою модель публикации, где она может выглядеть так:

scope :published, ->(timestamp = Time.now) { where('published_at <= ?', timestamp) }
scope :unpublished, ->(timestamp = Time.now) { where('published_at IS NULL OR published_at > ?', timestamp) }