Hi all, given these relationships class Order < ActiveRecord::Base belongs_to :item class Item < ActiveRecord::Base has_many :orders @items = Item.find( :all ) @items.each do |item| ... What''s the best way to test for existence of an "item" in the Order database? Many TIA, Craig
On Wed, Sep 16, 2009 at 5:46 PM, Dudebot <craignied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Hi all, given these relationships > > class Order < ActiveRecord::Base > belongs_to :item > > class Item < ActiveRecord::Base > has_many :orders > > @items = Item.find( :all ) > > @items.each do |item| > ... > > What''s the best way to test for existence of an "item" in the Order > database?@order = Order.find(:first, :conditions => ''whatever'', :include => :items ) @item = @order.items.find( :first, :conditions => ''whatever'' ) if @order -- Greg Donald http://destiney.com/
Thanks super, Greg, for helping me out. I''m dense, ''cause I couldn''t figure out the syntax for ''whatever''. I did get this to work in the .erb file: <% if Item.find( item ).orders.size > 0 %> <%=h "Found #{item.title} in Orders" %> <% end %> But I''m just wondering... is that the most efficient way to do it? Is there a more efficient way? Thanks for putting in the time to help this noob out, Craig On Sep 16, 6:12 pm, Greg Donald <gdon...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Wed, Sep 16, 2009 at 5:46 PM, Dudebot <craign...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Hi all, given these relationships > > > class Order < ActiveRecord::Base > > belongs_to :item > > > class Item < ActiveRecord::Base > > has_many :orders > > > @items = Item.find( :all ) > > > @items.each do |item| > > ... > > > What''s the best way to test for existence of an "item" in the Order > > database? > > @order = Order.find(:first, :conditions => ''whatever'', :include => :items ) > > @item = @order.items.find( :first, :conditions => ''whatever'' ) if @order > > -- > Greg Donaldhttp://destiney.com/
On Wed, Sep 16, 2009 at 7:33 PM, Dudebot <craignied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Thanks super, Greg, for helping me out. I''m dense, ''cause I couldn''t > figure out the syntax for ''whatever''. I did get this to work in > the .erb file: > > <% if Item.find( item ).orders.size > 0 %>I''d go with orders.empty? You will want to do your find in the controller. Set the results to an instance variable. @item = Item.find(...) Then that instance variable is available in your view: <%= debug @item %>> <%=h "Found #{item.title} in Orders" %> > <% end %> > > But I''m just wondering... is that the most efficient way to do it? Is > there a more efficient way?Depends on your app. You might want that :include => :items or you might not. It''ll save a bunch of smaller queries later if you leave it off, but then what if you needed all those items? It''s up to you. -- Greg Donald http://destiney.com/
2009/9/17 Greg Donald <gdonald-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > On Wed, Sep 16, 2009 at 7:33 PM, Dudebot <craignied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> >> Thanks super, Greg, for helping me out. I''m dense, ''cause I couldn''t >> figure out the syntax for ''whatever''. I did get this to work in >> the .erb file: >> >> <% if Item.find( item ).orders.size > 0 %> > > I''d go with orders.empty? > > You will want to do your find in the controller. Set the results to > an instance variable. > > @item = Item.find(...) > > Then that instance variable is available in your view: > > <%= debug @item %> > >> <%=h "Found #{item.title} in Orders" %> >> <% end %> >> >> But I''m just wondering... is that the most efficient way to do it? Is >> there a more efficient way? > > Depends on your app. You might want that :include => :items or you > might not. It''ll save a bunch of smaller queries later if you leave > it off, but then what if you needed all those items? It''s up to you.Isn''t that the wrong way round? Colin
2009/9/17 Dudebot <craignied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > Thanks super, Greg, for helping me out. I''m dense, ''cause I couldn''t > figure out the syntax for ''whatever''. I did get this to work in > the .erb file: > > <% if Item.find( item ).orders.size > 0 %>What is item here, is it already an Item object? If so then all you need is if item.orders.empty? No need to find it again. Arguably better would be to provide a method in Item, possibly ''orders?'' that indicates whether that item has any orders. Then you would use if item.orders? where method orders? of Item returns self.orders.empty? This moves logic from the view into the model which is often worthwhile. Whenever I see a.b.c I consider whether something should be moved into a model. Colin> <%=h "Found #{item.title} in Orders" %> > <% end %> > > But I''m just wondering... is that the most efficient way to do it? Is > there a more efficient way? >