# Thin controllers and fat models

**URL:** <https://www.ruby-forum.com/t/thin-controllers-and-fat-models/174907>\
**Category:** Rails\
**Created:** [September 3, 2009, 9:09pm UTC](https://www.ruby-forum.com/t/thin-controllers-and-fat-models/174907 "2009-09-03T21:09:30Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![trevoke](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee7513/32.png) [@trevoke](https://www.ruby-forum.com/u/trevoke)\
**Post date:** [September 3, 2009, 9:09pm UTC](https://www.ruby-forum.com/t/thin-controllers-and-fat-models/174907/1 "2009-09-03T21:09:30Z")

</div>

I’ve read this a few times recently.  
I thought a model’s job was only to explain “This is how I behave  
myself” and the controller’s job was to explain “This is what I do”.  
Is this basically right? So why do people want to stuff more and more  
stuff in the model?

---

<div class="post-metadata">

**Author:** ![trevoke](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee7513/32.png) [@trevoke](https://www.ruby-forum.com/u/trevoke)\
**Post date:** [September 3, 2009, 9:19pm UTC](https://www.ruby-forum.com/t/thin-controllers-and-fat-models/174907/2 "2009-09-03T21:19:58Z")

</div>

You want the controller to responsible for passing model data from the  
database to the view and vice versa. You don’t want to clutter the  
controller with model specific logic…that’s why you want it in the  
model where it’s self-contained. Try this article:

[http://www.therailsway.com/2007/6/1/railsconf-recap-skinny-controllers](http://www.therailsway.com/2007/6/1/railsconf-recap-skinny-controllers)

On Sep 3, 2:09 pm, Aldric G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![trevoke](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee7513/32.png) [@trevoke](https://www.ruby-forum.com/u/trevoke)\
**Post date:** [September 3, 2009, 9:30pm UTC](https://www.ruby-forum.com/t/thin-controllers-and-fat-models/174907/3 "2009-09-03T21:30:31Z")

</div>

No, I think the reasoning is that a model is “This is how my business  
logic works”, and a controller is “This is what the outside world is  
allowed to requests of my models”.

On Sep 3, 3:09 pm, Aldric G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
