我希望我能正确解释这一点,目前我有一个具有以下关联的模型
class Tournament < ActiveRecord::Base
has_one :gallery, dependent: :destroy
has_many :gallery_images, :through => :gallery, dependent: :destroy
end
我想将gallery_images分页而不是锦标赛本身,但是因为我将gallery_images作为嵌套属性我不知道如何使用will_paginate
控制器
def galleries
@tournaments = Tournament.all
#tried this
@gallery_images = @tournaments.gallery_images.paginate(:page => params[:page], :per_page => 9)
end
查看
<% @tournaments.each do |t| %>
<div>
<div class="clear"></div>
<ul class="team-gallery">
<% t.gallery_images.each do |g| %>
<li>
<%= link_to image_tag(g.photo.url(:gallery_large)), g.photo.url(:gallery_large), class: 'clb-photo' %>
</li>
<% end %>
</ul>
</div>
我如何只对t.gallery_images进行分页?
任何帮助表示赞赏
答案 0 :(得分:3)
你确定这是有效的代码吗?
@gallery_images = @tournaments.gallery_images.paginate(:page => params[:page], :per_page => 9)
您正在ActiveRecord集合上调用gallery_images
,这似乎是一个实例方法,它实际上是一个数组。那不会起作用。
我怀疑你想要围绕比赛进行循环并在每场锦标赛的图像上调用分页。
<% @tournaments.each do |t| %>
<%= will_paginate t.gallery_images.paginate(page: params[:page], per_page: 9) %>
<% end %>
您可以在Tournament
模型上创建一个实例方法,以避免在每次要对锦标赛图像进行分页时编写所有内容。
class Tournament
def paginated_images(page, per_page = 9)
gallery_images.paginate(page: page, per_page: per_page)
end
end
然后您可以在视图中执行此操作:
<% @tournaments.each do |t| %>
<% images = t.paginated_images(params[:page]) %>
<% images.each do |image| %>
<%= image_tag image %>
<% end %>
<%= will_paginate images %>
<% end %>
答案 1 :(得分:1)
在您的控制器中定义辅助方法paginate_images
helper_method :paginate_images
def paginate_images tournament
@images = tournament.gallery_images.paginate(:page => params[:page], :per_page => 9)
end
在你看来
<% @tournaments.each do |t| %>
<div>
<div class="clear"></div>
<ul class="team-gallery">
<% paginate_images(t) %>
<% @images.each do |g| %>
<li>
<%= link_to image_tag(g.photo.url(:gallery_large)), g.photo.url(:gallery_large), class: 'clb-photo' %>
</li>
<% end %>
</ul>
</div>
<% end %>
答案 2 :(得分:0)
尝试了两个答案,并没有像预期的那样工作,仍然得到未定义的方法,虽然这两个答案都有很大的帮助,到目前为止解决方案已经低于......
它的工作原理是gallery_images是分页的,但不好做一些调整,到目前为止我在视图中有点ugyy但是会创建一个帮助方法来改变它
<% @tournaments.each do |t| %>
<div>
<div class="clear"></div>
<ul class="team-gallery">
<% images = t.gallery_images.paginate(:page => params[:page], :per_page => 9).each do |g| %>
<li>
<%= link_to image_tag(g.photo.url(:gallery_large)), g.photo.url(:gallery_large), class: 'clb-photo' %>
</li>
<% end %>
</ul>
<%= will_paginate images %>
</div>