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.
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.
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?
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.