我的帖子索引视图中有这段代码:
<% @exercises.each do |exercise| %>
<% if exercise.post_id == post.id %>
<table>
<tr>
<th style="color:white;"><%= exercise.name %></th>
</tr>
</table>
<% end %>
<% end %>
每个帖子都有5个与之相关的练习,但我想在索引页面上只为每个帖子显示5个。我无法弄清楚如何限制每个帖子的数量。我已经在块的开头尝试了限制功能&#39; @ exercises.limit(5).each&#39;但这只存在前5个练习。控制器中的实例变量如下所示:
@exercises = Exercise.all
更新: 这是我的模特:
class Exercise < ActiveRecord::Base
belongs_to :post
belongs_to :user
belongs_to :extype
end
class Post < ActiveRecord::Base
searchkick
belongs_to :user
belongs_to :category
has_many :comments
has_many :exercises
accepts_nested_attributes_for :exercises
end
我的视图中没有任何其他相关代码,在我的控制器中没有太多:
def index
@exercises = Exercise.all
if params[:category].blank?
@posts = Post.all.order("created_at DESC")
else
@category_id = Category.find_by(name: params[:category]).id
@posts = Post.where(:category_id => @category_id).order("created_at DESC")
end
end
答案 0 :(得分:1)
*基于Post
has_many
exercises
和Exercise
belongs_to
post
的假设。 * 强>
在Exercise
模特课程中添加以下方法:
def self.exercises_to_display_for_post(post)
Exercise.where(post_id: post.id).limit(5)
end
此方法仅为特定exercises
检索5 post
。
然后,在PostsController
:
@exersises_to_display_for_post = Exercise.exercises_to_display_for_post(@post)
然后,您可以在@exersises_to_display_for_post
中使用view
个实例变量,其中恰好有5个exercises
与@post
对应!
在您看来,您可以访问@post
实例变量,并且exercises
实例变量中的@exersises_to_display_for_post
对应5 {{1}}。现在,你只需要遍历它们并显示!