рельсы пагинация вложенных маршрутов - PullRequest
0 голосов
/ 24 ноября 2010

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

Есть ли способ изменить путь нумерации страниц без создания моего собственного представления ссылок на страницы? Я попытался перейти к rdoc для will_paginate здесь , но он попадает на чертову страницу.

Есть идеи?

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>

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 24 ноября 2010

Есть несколько мест, где вы можете пойти не так.Возможно, у вас неправильно настроены маршруты.Вызов 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>

Возможно, вам нужно разбить на страницы массив.Это просто сделать, пожалуйста, обратитесь к это .Надеюсь, это помогло.

...