NudeCanalTroll
NudeCanalTroll

Reputation: 2286

How can I keep my Rails controllers DRY and utilize my own API?

Let's say I have a controller called Books (and a corresponding Book model), and a controller called Users (and a corresponding User model). Each of these controllers has the standard CRUD actions, and they serve as the vehicle for my website's API as well.

Most of the pages on my site fit into this framework easily. For example, viewing a book. Or viewing your user account. Or editing your user account. Etc.

But let's say I have an index that will be somewhat unique: I want to show a list of users AND a list of books. This raises a few questions:

Upvotes: 1

Views: 248

Answers (2)

Helio Santos
Helio Santos

Reputation: 6805

Whichever you want.

1) I would probably write another controller, though it may end up to be a question of taste and it may change with the context of the application.

2) I would fetch the data from both models. There is no MVC rule mapping controllers and models one to one.

I am not quite sure what you mean by "queries" but you can put them in model methods (or scopes) to avoid DRY. Of course one gets tempted to do simple queries in controllers because ActiveRecord encaplulates them as methods (e.g. User.find(n) )

Upvotes: 0

Richard Lau
Richard Lau

Reputation: 696

You can use scopes(google search it) in your model to keep your controllers lean. Depending on what you want to show you can create a new method and view. lets say you have a user dashboard that list your books and the authors which are in seperate models.

you can create a new method called def dashboard inside your user controller since it relates to your user.

def dashboard

end 

you would create a helper method in your model to scope the specific queries. Remember to also add the proper route to your routes file.

I hope this helps

Upvotes: 1

Related Questions