我目前在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排序?如果不容易达到,那么什么构造允许将书籍和作者存储为单独的实体,但是允许使用定义的顺序获得分页器?
答案 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])