2010-11-24 2 views
0

Я пытаюсь поставить contacts с частичным разбиением на части для просмотра rooftops. На крышах много контактов, а также имеет вложенный маршрут, позволяющий /rooftops/1/contacts. Когда я пытаюсь создать ссылки will_paginate, я получаю /rooftops/1 как путь, а не '/ rooftops/1/contacts /'.rails разбиение на страницы вложенных маршрутов

Есть ли способ изменить путь разбивки на страницы, не создавая собственный вид ссылки на страницы? Я попытался перейти к 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.

--------------------- EDIT ---------------------

Мои маршруты

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

wiki-страница github mislav/will_pageinate, и документация, вероятно, такая же, попробуйте здесь: https://github.com/mislav/will_paginate/wiki – fifigyuri 2010-11-24 19:02:07

ответ

1

Есть несколько мест, где вы можете пойти не так. Возможно, у вас нет правильных маршрутов. Звонок will_paginate должен быть в виде контактов, это он есть? Это не ясно из фрагмента, который вы дали.

Метод в модели 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

Смежные вопросы