Rails模板:在show上包含其余的索引

时间:2014-07-13 02:29:16

标签: ruby-on-rails ruby-on-rails-4

我有一个相当典型的博客应用程序,其中包括show (帖子)和索引(帖子)方法:

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  def show
    @post = Post.find(params[:id])
  end

  def index
    # redirect_to post_path(Post.last) and return
    @posts = Post.all.order(created_at: :desc).where('text like ?', "%#{params[:search]}%").page(params[:page]).per_page(6)
  end

我将如何包含每个帖子下面的所有其他帖子(分页) - 减去您正在查看的帖子。所以我得到了类似的东西:

POST 4:blah blah blah

----档案-----

POST 5:blah blah blah

POST 3:blah blah blah

POST 2:blah blah blah

POST 1:blah blah blah

2 个答案:

答案 0 :(得分:1)

Ruby的一个很酷的功能是减去数组的能力。你可以试试这个:

def show
  @post = Post.find(params[:id])
  @other_posts = Post.all - Array(@post)
end

然后在您的视图中对@other_posts变量进行分页。

答案 1 :(得分:1)

类似的东西:

def show
  @post = Post.find(params[:id])
  @other_posts = Post.where.not(id: @post)
end

我将其用于其他解决方案的原因是因为您对@other_posts的查询可能不包含@post。通过这种方式,您可以确切地知道自己获得了什么。