tables association and accessing them in views - newbie question

Hi I am new to rails and have a very simple scenario like mentioned here

table: photos     id:int     user_id:int

table: users     id:int     email:string

In the photos model i said it belongs_to :user

When I access the photos.all, I can get the user email by photos.first.user.email

If I want to display 100 photos on a page, the email is accessed as above it goes to the database at that time to get the value

1) Am I violating MVC here as the database query is being sent (though not by me directly) in the view? 2) Since the query goes 100 times in the view, should there be a better way to get all the data at once in the controller/model and pass all that to the view.

I am coming from PHP world where I used to write queries and there I used to do a join on photos table and got all the data at once. Is this join costlier than getting data in each query as above

Thanks Kiran

Try :include => :user when you request the photos, and that will grab the user in the same request as the photo.

Walter

When I access the photos.all, I can get the user email by photos.first.user.email

1) Am I violating MVC here ?

No you're not, as it's the model (via ActiveRecord) doing the query - that's exactly how you're supposed to do it :slight_smile: (but do try to avoid directly accessing models in views; don't do "Photos.first.user.email" in an erb file... have @photos populated from the controller so you can call @photos.first.user.email in the view)

2) Since the query goes 100 times in the view, should there be a better way to get all the data at once in the controller/model and pass all that to the view.

I am coming from PHP world where I used to write queries and there I used to do a join on photos table and got all the data at once. Is this join costlier than getting data in each query as above

As Walter says, :include the :user in the photos query to eagerly load them. This way Rails will do the DB join and return all the data for you.