Rails排序相关记录

时间:2012-07-17 11:18:51

标签: ruby-on-rails

使用Rails 3.0.10& Ruby 1.9.2。

我有一个Book模型,它有很多页面。

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 %>

由于

2 个答案:

答案 0 :(得分: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排序。

答案 1 :(得分:0)

对于较新版本的Rails,语法已更改:

class Book < ActiveRecord::Base
    has_many :pages, -> { order "page_number asc" }
end

class Page < ActiveRecord::Base
  belongs_to :book
end