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. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 27 Feb 2009, at 11:31, Petan Cert wrote:> > 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> it ends with error. > > Thanks for any help. > P. > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thx for all your suggestions, but it always ended up with this error. NoMethodError in GalleriesController#index undefined method `photos'' for #<Class:0x54a56dc> def index @title = "gallery preview" @user = User.find(params[:user_id]) @gallery = @user.galleries @primary = @gallery.photos.primary.first end I think, that my routes should be fine. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 On Fri, Feb 27, 2009 at 12:47 PM, Petan Cert < rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Thx for all your suggestions, but it always ended up with this error. > > NoMethodError in GalleriesController#index > undefined method `photos'' for #<Class:0x54a56dc> > > def index > @title = "gallery preview" > @user = User.find(params[:user_id]) > @gallery = @user.galleries > @primary = @gallery.photos.primary.first > end > > I think, that my routes should be fine. > > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 On 27 Feb., 15:05, Petan Cert <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> 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. > > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---