4

Rails3.0.10とRuby1.9.2を使用します。

ページ数の多い本モデルがあります。

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

ありがとう

4

2 に答える 2

8

実際には、関連付け宣言で直接デフォルトの順序を指定できると思います。

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ます。

于 2012-07-17T11:22:12.960 に答える
2

Railsの新しいバージョンでは、構文が変更されています。

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

class Page < ActiveRecord::Base
  belongs_to :book
end
于 2018-04-11T21:41:57.173 に答える