在Rails中通过连接模型定义的顺序进行分页

时间:2010-10-13 11:18:47

标签: ruby-on-rails pagination

我目前在Rails应用程序(Rails 2.3.5)中存在以下问题:

  • 我想按照作者姓名对书中存储的书籍进行排序,然后是书名。

书籍和作者是具体的模型,相应的表格是Ressources和People。架构的相关部分是(我已经略微删除了模型):

  create_table "people", :force => true do |t|
      t.string   "sur_name"
      t.string   "pre_name"
      ...
      t.string   "type"
    end

  create_table "people_ressources", :id => false, :force => true do |t|
      t.integer  "ressource_id"
      t.integer  "person_id"
    end

  create_table "ressources", :force => true do |t|
      t.string   "type"
      t.string   "title"
    end

为了显示图书清单,我使用了以下分页器:

@books = Book.paginate(
             :order => 'title', :per_page => 15, :page => params[:page])

我现在的问题是:如何构建分页符,以便书籍不是按标题排序,而是首先由作者(== person)sur_name排序?如果不容易达到,那么什么构造允许将书籍和作者存储为单独的实体,但是允许使用定义的顺序获得分页器?

1 个答案:

答案 0 :(得分:1)

鉴于您有一本书的多位作者,您需要决定如何确定哪个作者的姓名应该用于订购图书清单。

您可以为您定义的has_one :main_author, :class_name => 'Author'类添加关联Book(可能在people_ressources中有一个主要作者字段,或者您只是使用第一位可用作者:< / p>

has_one :main_author, :through => :author_books, :order => 'sur_name'

拥有has_one关联意味着您可以将其包含在对sur_name的分页和顺序中:

@books = Book.paginate(:order => "#{Author.table_name}.sur_name", 
                       :per_page => 15, 
                       :page => params[:page])