2010-11-24 90 views
0

我試圖把一個contacts分頁部分內部的rooftops視圖。屋頂上有許多聯繫人,並且還有一個嵌套的路線,允許/rooftops/1/contacts。當我嘗試創建will_paginate鏈接時,我獲得/rooftops/1作爲路徑而不是「/ rooftops/1/contacts /」。軌道分頁嵌套路線

有沒有辦法修改分頁路徑而無需創建自己的分頁鏈接視圖?我曾嘗試去rdoc的will_paginate here,但它去了一個godaddy頁面。

任何想法?

class Contact < ActiveRecord::Base 
    has_and_belongs_to_many :parents 
    has_and_belongs_to_many :rooftops 
    has_one :user 
    has_one :address, :as => :addressable, :dependent => :destroy 
    has_many :phone, :as => :phoneable, :dependent => :destroy 
    belongs_to :position 
    accepts_nested_attributes_for :address, :reject_if => lambda { |a| a[:street].blank? } 
    accepts_nested_attributes_for :phone, :reject_if => lambda { |a| a[:phone_number].blank? }, :allow_destroy => true 

    validates_associated :address, :phone, :position 
    validates_presence_of :lname 
    validates_presence_of :fname 
    validates_presence_of :email 
    validates_presence_of :position_id 

    def self.search(page) 
    paginate :per_page => 3, 
       :page => page 
    end 
end 

class RooftopsController < ApplicationController 
    def show 
    @rooftop = Rooftop.find(params[:id]) 
    @contacts = @rooftop.contacts.search(1) 
    end 
end 

<div class='pagination'> 
    <%= will_paginate contacts %> 
</div> 

這將創建/rooftops/1,我不知道如何將它強制/rooftops/1/contacts。編號---------------------

我的路線是

resources :rooftops do 
    resources :contacts 
end 

我想我知道我的問題在哪裏。由於我的搜索功能在模型中。我從來沒有碰到過contacts控制器。我從rooftops控制器執行搜索,並從contacts視圖調用部分。我會展示我的觀點。

<div id='contacts' style='margin-top: 20px; border-bottom: 1px solid lightgrey;'> 
    <h4>Contacts <%= link_to "new", new_polymorphic_path([@rooftop, Contact]) %></h4> 

<%= render :partial => 'contacts/contacts', :locals => { :object_type => @rooftop, :layer => 1 } %> 
</div> 

這是實際的部分。正如你所看到的,它從來沒有真正通過聯繫人控制器。這可能是我的問題的根源嗎?

<table> 
<tr> 
    <th></th> 
</tr> 
<% @contacts.each do |contact| %> 
<tr> 
    <td class='contact_mailer'> 
    <%= link_to image_tag('icons/gray_light/mail_12x9.png'), "mailto:#{contact.email}" %> 
    </td> 
    <td> 
    <div class='expandable layer_<%= layer %>' style='float: left'> 
    <%= link_to contact.fname.titleize + ' ' + contact.lname.titleize, polymorphic_path([object_type, @contact]), :class => "contact_name" %> 
     </div> 
    </td> 
    <td> 
     <%= image_tag 'icons/blue/key_stroke_8x8.png' %> 
    </td> 
</tr> 
<% end %> 
</table> 

<br /> 
<div class='pagination'> 
    <%= will_paginate @contacts %> 
</div> 

感謝您的幫助。

+0

mislav/will_pageinate的github wiki頁面和文檔可能是相同的,請在此處嘗試:https://github.com/mislav/will_paginate/wiki – fifigyuri 2010-11-24 19:02:07

回答

1

有幾個地方你可能會出錯。也許你沒有正確設置路線。 will_paginate調用應該在聯繫人視圖中,它在那裏?從你給的片段中不清楚。

self.search方法中的Contact模型對我來說很好奇,這應該是在控制器中。這很有意義,搜索方法與Contact的控制有關。並將其作爲實例方法。

路線rooftops/:id/contacts應該導致聯繫人控制器。你可能會檢查它是否如此。

我想你需要的是這樣的:

class Contact < ActiveRecord::Base 
    # your model definition, validations 
    # no self.search method here 
    cattr_reader :per_page 
    @@per_page = 3 
end 

class RooftopsController < ApplicationController 
    # your RooftopsController methods 
    # the show you listed should be in ContactsController 
end 

class ContactsController < ApplicationController 
    def show 
    # I guess you have contacts for Rooftop 
    @contacts = Rooftop.find(params[:id]).contacts 
    # you paginate the array of results 
    @contacts.paginate(params[:page]) 
    end 

## This is in the view of the Contacts#show 
<div class='pagination'> 
    <%= will_paginate contacts %> 
</div> 

你可能需要分頁陣列上。這很簡單,請參閱this。希望這有助於。

+0

請查看我的編輯以獲得進一步的補充和代碼 – rrivas 2010-11-24 19:54:49