2012-07-17 146 views
2

使用Rails 3.0.10 & Ruby 1.9.2。Rails排序关联记录

我有一个书模型有很多页。

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 

当我检索一本书的页面时,我总是希望它们按页码排序。什么是正确的方式来处理这个问题,以便调用book.pages将按顺序返回所有页面?

编辑本书时,我还会显示每个可编辑页面的内容。如果我使用嵌套属性,这会返回页面的正确顺序,假设我以前的问题已解决?

<%= form_for [@book, @pages] do |f| %> 
    <%= f.fields_for :pages do |page| %> 
    do something 
    <% end %> 
<% end %> 

感谢

回答

7

我相信你实际上可以在关联声明中直接指定的默认顺序:

class Book < ActiveRecord::Base 
    has_many :pages, :order => "page_number asc" 
end 

class Page < ActiveRecord::Base 
    belongs_to :book 
end 

这样,你就不必自己指定Book#pages法,它仍然会按默认排序page_number asc