限制代码块中的输出数量,Rails

时间:2015-08-13 03:56:16

标签: ruby-on-rails variables limit codeblocks

我的帖子索引视图中有这段代码:

<% @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

1 个答案:

答案 0 :(得分:1)

*基于Post has_many exercisesExercise 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}}。现在,你只需要遍历它们并显示!