2012-07-17 180 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