Using Rails 3.0.10 & Ruby 1.9.2.
I have a Book model which has many Pages.
class Book < ActiveRecord::Base
has_many :pages
# is this right?
def pages
Page.order('page_number asc').find_all_by_book_id(:id)
end
end
class Page < ActiveRecord::Base
belongs_to :book
end
When I retrieve the pages of a book, I always want them ordered by their page number. What is the proper way to handle this so that calling book.pages will return all pages in sequence?
When editing the book I also show the content of each page which can be edited. If I am using nested attributes would this return the pages in their proper sequence, assuming my previous question is resolved?
<%= form_for [@book, @pages] do |f| %>
<%= f.fields_for :pages do |page| %>
do something
<% end %>
<% end %>
Thanks
I believe you could actually specify the default order directly on the association declaration:
class Book < ActiveRecord::Base
has_many :pages, :order => "page_number asc"
end
class Page < ActiveRecord::Base
belongs_to :book
end
This way, you won't have to specify the Book#pages
method yourself, and it will still be ordered by page_number asc
by default.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With