[英]rails pagination nested routes
我正在尝试将分页的contacts
部分放在rooftops
视图的内部。 屋顶有许多接触点,并且还具有允许/rooftops/1/contacts
的嵌套路径。 当我尝试创建will_paginate
链接时,我将/rooftops/1
作为路径而不是'/ rooftops / 1 / contacts /'。
有没有一种方法可以修改分页路径而无需创建自己的分页链接视图? 我已经尝试过在rdoc上进行will_paginate的操作,但它转到了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>
谢谢你的帮助。
您可能会在几个地方出错。 也许您的路线设置不正确。 will_paginate
调用应该在联系人视图中,在那儿吗? 从您提供的片段中还不清楚。
Contact
模型中的self.search
方法对我来说很好奇,这应该在控制器中。 这很有意义,搜索方法与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>
您可能需要对数组进行分页。 这是简单的事情,请参考这个 。 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.