simple select

Hi all,

I have two models gallery and photo (has_many -> belongs_to). Can I use this to find the primary photo for the given gallery?

@gallery = @user.galleries @primary_photo = @gallery.photos.find_by_primary(true).first

it ends with error.

Thanks for any help. P.

Hi all,

I have two models gallery and photo (has_many -> belongs_to). Can I use this to find the primary photo for the given gallery?

@gallery = @user.galleries @primary_photo = @gallery.photos.find_by_primary(true).first

find_by_xxx returns a single object (or nil) so that call to first is
superfluous.

Fred

the correct call is: @primary_photo = @gallery.photos.find(:first, :conditions => {:primary => true})

or (but thats an old one and i don't know if that isn't deprecated): @primary_photo = @gallery.photos.find_first_by_primary(true)

or you could add a named_scope to your photo-model:   named_scope :primary, :conditions => { :primary => true }

then your call could be like:   @primary_photo = @gallery.photos.primary.first

this should be the nicest alternative.

It looks from your code as if you’re returning a list of user galleries rather than a single one, so the list you get won’t have a photos method. Does your code work if you change the third line in your method to

@gallery = @user.galleries.first

Eifion

http://asciicasts.com

Twitter: @eifion

Eifion Bedford wrote:

It looks from your code as if you're returning a list of user galleries rather than a single one, so the list you get won't have a photos method. Does your code work if you change the third line in your method to

@gallery = @user.galleries.first

Yes, thats the error. Now it is working but just for the first one.

Is there a way to loop all of the users galleries? Thank you.

P.

well if you want all the primary photos just use my suggested named_scope. then you can ask:   @all_primary_photos = Photo.all.primary # or just Photo.primary   @all_galleries = Gallery.all no loop needed. but if you want to loop, you can do that with   @all_galleries.each do |gallery|     # gallery.photos   end