i have: class Library << ActiveRecord::Base has_many :books end class Book << ActiveRecord::Base belongs_to :library end in my controller i have: render :xml=> Library.find(:all).to_xml(:include=>books) but, i would like put a condition in the books ( e.: pages >= 100 ) i would like to create a xml with all Libraries, but books with pages more than 100) How to do this? -- Ítalo Matos Cavalcante Santos Desenvolvedor Web/Mobile Analista de Sistemas http://italomatos.wordpress.com/ - Flex nos Trilhos http://del.icio.us/italomatos http://www.activebrasil.com.br --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
2009/7/31 Italo Matos <italomatos-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> i have: > > class Library << ActiveRecord::Base > has_many :books > end > > class Book << ActiveRecord::Base > belongs_to :library > end > > in my controller i have: > > render :xml=> Library.find(:all).to_xml(:include=>books) > but, i would like put a condition in the books ( e.: pages >= 100 ) > > i would like to create a xml with all Libraries, but books with pages more > than 100) >Just put the conditions in the Library.find call, ie ["books.pages >?", 100] or similar. Or better still provide a named scope in Library to do this. Colin
I can`t put the conditionbs in the Library.find, because this relashionship is uses in other part of code. How to call named scope in this case? On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > > > > i have: > > > class Library << ActiveRecord::Base > > has_many :books > > end > > > class Book << ActiveRecord::Base > > belongs_to :library > > end > > > in my controller i have: > > > render :xml=> Library.find(:all).to_xml(:include=>books) > > but, i would like put a condition in the books ( e.: pages >= 100 ) > > > i would like to create a xml with all Libraries, but books with pages more > > than 100) > > Just put the conditions in the Library.find call, ie ["books.pages >> ?", 100] or similar. Or better still provide a named scope in Library > to do this. > > Colin
2009/7/31 Italo Matos <italomatos-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > I can`t put the conditionbs in the Library.find, because this > relashionship is uses in other part of code. > How to call named scope in this case?I meant use render :xml=> Library.find(:all, :include => :books, :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) Or define a named_scope books_with_more_than_100_pages, though I suspect you would actually parameterise this, then render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) The above not tested so probably full of typos. By the way it is generally frowned upon to top post in this list. Colin> > > > > > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> >> > i have: >> >> > class Library << ActiveRecord::Base >> > has_many :books >> > end >> >> > class Book << ActiveRecord::Base >> > belongs_to :library >> > end >> >> > in my controller i have: >> >> > render :xml=> Library.find(:all).to_xml(:include=>books) >> > but, i would like put a condition in the books ( e.: pages >= 100 ) >> >> > i would like to create a xml with all Libraries, but books with pages more >> > than 100) >> >> Just put the conditions in the Library.find call, ie ["books.pages >>> ?", 100] or similar. Or better still provide a named scope in Library >> to do this. >> >> Colin > > >
but, if me put the conditions in find method, it will filter much libraries ( if libraries has more one book with more than 100 pages ). On 31 jul, 17:10, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > > > > I can`t put the conditionbs in the Library.find, because this > > relashionship is uses in other part of code. > > How to call named scope in this case? > > I meant use render :xml=> Library.find(:all, :include => :books, > :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) > > Or define a named_scope books_with_more_than_100_pages, though I > suspect you would actually parameterise this, then > render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) > > The above not tested so probably full of typos. > > By the way it is generally frowned upon to top post in this list. > > Colin > > > > > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> > i have: > > >> > class Library << ActiveRecord::Base > >> > has_many :books > >> > end > > >> > class Book << ActiveRecord::Base > >> > belongs_to :library > >> > end > > >> > in my controller i have: > > >> > render :xml=> Library.find(:all).to_xml(:include=>books) > >> > but, i would like put a condition in the books ( e.: pages >= 100 ) > > >> > i would like to create a xml with all Libraries, but books with pages more > >> > than 100) > > >> Just put the conditions in the Library.find call, ie ["books.pages >> >> ?", 100] or similar. Or better still provide a named scope in Library > >> to do this. > > >> Colin
2009/7/31 Italo Matos <italomatos-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > but, if me put the conditions in find method, > it will filter much libraries ( if libraries has more one book with > more than 100 pages ). >I don''t understand. Your original query would give you everything, the modified one will only give you Libraries and books with greater than 100 pages which is what I thought you asked for. To quote ''i would like to create a xml with all Libraries, but books with pages more than 100''. Perhaps I do not understand exactly what you mean, could you give a more detailed example of what you want? Colin> > > > > On 31 jul, 17:10, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> >> > I can`t put the conditionbs in the Library.find, because this >> > relashionship is uses in other part of code. >> > How to call named scope in this case? >> >> I meant use render :xml=> Library.find(:all, :include => :books, >> :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) >> >> Or define a named_scope books_with_more_than_100_pages, though I >> suspect you would actually parameterise this, then >> render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) >> >> The above not tested so probably full of typos. >> >> By the way it is generally frowned upon to top post in this list. >> >> Colin >> >> >> >> > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> > i have: >> >> >> > class Library << ActiveRecord::Base >> >> > has_many :books >> >> > end >> >> >> > class Book << ActiveRecord::Base >> >> > belongs_to :library >> >> > end >> >> >> > in my controller i have: >> >> >> > render :xml=> Library.find(:all).to_xml(:include=>books) >> >> > but, i would like put a condition in the books ( e.: pages >= 100 ) >> >> >> > i would like to create a xml with all Libraries, but books with pages more >> >> > than 100) >> >> >> Just put the conditions in the Library.find call, ie ["books.pages >>> >> ?", 100] or similar. Or better still provide a named scope in Library >> >> to do this. >> >> >> Colin > > >
i want to list every libraries, but only show the your books with more than 100 pages. On 31 jul, 18:15, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > > > > but, if me put the conditions in find method, > > it will filter much libraries ( if libraries has more one book with > > more than 100 pages ). > > I don''t understand. Your original query would give you everything, the > modified one will only give you Libraries and books with greater than > 100 pages which is what I thought you asked for. To quote ''i would > like to create a xml with all Libraries, but books with pages more > than 100''. Perhaps I do not understand exactly what you mean, could > you give a more detailed example of what you want? > > Colin > > > > > On 31 jul, 17:10, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> > I can`t put the conditionbs in the Library.find, because this > >> > relashionship is uses in other part of code. > >> > How to call named scope in this case? > > >> I meant use render :xml=> Library.find(:all, :include => :books, > >> :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) > > >> Or define a named_scope books_with_more_than_100_pages, though I > >> suspect you would actually parameterise this, then > >> render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) > > >> The above not tested so probably full of typos. > > >> By the way it is generally frowned upon to top post in this list. > > >> Colin > > >> > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> >> > i have: > > >> >> > class Library << ActiveRecord::Base > >> >> > has_many :books > >> >> > end > > >> >> > class Book << ActiveRecord::Base > >> >> > belongs_to :library > >> >> > end > > >> >> > in my controller i have: > > >> >> > render :xml=> Library.find(:all).to_xml(:include=>books) > >> >> > but, i would like put a condition in the books ( e.: pages >= 100 ) > > >> >> > i would like to create a xml with all Libraries, but books with pages more > >> >> > than 100) > > >> >> Just put the conditions in the Library.find call, ie ["books.pages >> >> >> ?", 100] or similar. Or better still provide a named scope in Library > >> >> to do this. > > >> >> Colin
2009/7/31 Italo Matos <italomatos-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > i want to list every libraries, > but only show the your books with more than > 100 pages. >I understand now. I can not immediately see how to do that in one query. Anyone else? You are _still_ top posting. It makes it much more difficult for someone who has not been following the thread to pick it up and help. Colin> > > > On 31 jul, 18:15, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> >> > but, if me put the conditions in find method, >> > it will filter much libraries ( if libraries has more one book with >> > more than 100 pages ). >> >> I don''t understand. Your original query would give you everything, the >> modified one will only give you Libraries and books with greater than >> 100 pages which is what I thought you asked for. To quote ''i would >> like to create a xml with all Libraries, but books with pages more >> than 100''. Perhaps I do not understand exactly what you mean, could >> you give a more detailed example of what you want? >> >> Colin >> >> >> >> > On 31 jul, 17:10, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> > I can`t put the conditionbs in the Library.find, because this >> >> > relashionship is uses in other part of code. >> >> > How to call named scope in this case? >> >> >> I meant use render :xml=> Library.find(:all, :include => :books, >> >> :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) >> >> >> Or define a named_scope books_with_more_than_100_pages, though I >> >> suspect you would actually parameterise this, then >> >> render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) >> >> >> The above not tested so probably full of typos. >> >> >> By the way it is generally frowned upon to top post in this list. >> >> >> Colin >> >> >> > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: >> >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> >> >> > i have: >> >> >> >> > class Library << ActiveRecord::Base >> >> >> > has_many :books >> >> >> > end >> >> >> >> > class Book << ActiveRecord::Base >> >> >> > belongs_to :library >> >> >> > end >> >> >> >> > in my controller i have: >> >> >> >> > render :xml=> Library.find(:all).to_xml(:include=>books) >> >> >> > but, i would like put a condition in the books ( e.: pages >= 100 ) >> >> >> >> > i would like to create a xml with all Libraries, but books with pages more >> >> >> > than 100) >> >> >> >> Just put the conditions in the Library.find call, ie ["books.pages >>> >> >> ?", 100] or similar. Or better still provide a named scope in Library >> >> >> to do this. >> >> >> >> Colin > > >
I run into these sort of to_xml problems all the time. Especially with nested models it gets really ugly, but I think for you just adding a line to your model should fix it. ...I''ve been working on an issue similar to this is on another thread but its a little more complicated because it uses order and a join, but your situation is similar. http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/82d640d37bdfb3cb?hl=en Here is how I would solve your issue. Add this line to your model class Library << ActiveRecord::Base has_many :books has_many :long_books, :class_name => "Book", :conditions => ''pages > 100'' end Now update the controller to include :long_books Library.find(:all, :include => :long_books).to_xml (:include=>:long_books) On Jul 31, 2:42 pm, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > > > > i want to list every libraries, > > but only show the your books with more than > > 100 pages. > > I understand now. I can not immediately see how to do that in one > query. Anyone else? > > You are _still_ top posting. It makes it much more difficult for > someone who has not been following the thread to pick it up and help. > > Colin > > > > > > > On 31 jul, 18:15, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> > but, if me put the conditions in find method, > >> > it will filter much libraries ( if libraries has more one book with > >> > more than 100 pages ). > > >> I don''t understand. Your original query would give you everything, the > >> modified one will only give you Libraries and books with greater than > >> 100 pages which is what I thought you asked for. To quote ''i would > >> like to create a xml with all Libraries, but books with pages more > >> than 100''. Perhaps I do not understand exactly what you mean, could > >> you give a more detailed example of what you want? > > >> Colin > > >> > On 31 jul, 17:10, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> >> > I can`t put the conditionbs in the Library.find, because this > >> >> > relashionship is uses in other part of code. > >> >> > How to call named scope in this case? > > >> >> I meant use render :xml=> Library.find(:all, :include => :books, > >> >> :conditions => [''books.pages >= ?'', 100]).to_xml(:include=>books) > > >> >> Or define a named_scope books_with_more_than_100_pages, though I > >> >> suspect you would actually parameterise this, then > >> >> render :xml=> Library.books_with_more_than_100_pages.to_xml(:include=>books) > > >> >> The above not tested so probably full of typos. > > >> >> By the way it is generally frowned upon to top post in this list. > > >> >> Colin > > >> >> > On 31 jul, 16:44, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > >> >> >> 2009/7/31 Italo Matos <italoma...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: > > >> >> >> > i have: > > >> >> >> > class Library << ActiveRecord::Base > >> >> >> > has_many :books > >> >> >> > end > > >> >> >> > class Book << ActiveRecord::Base > >> >> >> > belongs_to :library > >> >> >> > end > > >> >> >> > in my controller i have: > > >> >> >> > render :xml=> Library.find(:all).to_xml(:include=>books) > >> >> >> > but, i would like put a condition in the books ( e.: pages >= 100 ) > > >> >> >> > i would like to create a xml with all Libraries, but books with pages more > >> >> >> > than 100) > > >> >> >> Just put the conditions in the Library.find call, ie ["books.pages >> >> >> >> ?", 100] or similar. Or better still provide a named scope in Library > >> >> >> to do this. > > >> >> >> Colin