如何根据rails中的user_id过滤所有帖子?

时间:2015-06-29 07:47:03

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller

我在1:Nuser模型中有books个关系。当我通过门户网站创建books的新条目时,一切正常,包括在foreign-key表中保存user_id books

但是,当我获取数据时,每个用户都会看到所有books。如何根据登录用户过滤图书?

书籍控制器

class BooksController < ApplicationController
 before_action :authenticate_user!

def index
 @book = Book.paginate(page: params[:page], per_page: 5)
 respond_to do |format|
  format.html
  format.json { render json: @simulation }
  end
end

def new
  @book = Book.new
end

def create
  @book = current_user.books.build(simulation_params)
  if @book.save
    redirect_to action: 'index'
  else
    render 'new'
  end
end

def show
  @book = Book.find(params[:id])
end
....

在哪里

书籍模型类

class Book < ActiveRecord::Base
 belongs_to :user
end

用户模型类

class User < ActiveRecord::Base
 devise :database_authenticatable, :registerable, :validatable
 has_many :books, :dependent => :destroy
end

我试过在Book controller.index方法中进行一些修改,但它显示错误:

def index
 @user = current_user.id
 @book = @user.books
 @book = Book.paginate(page: params[:page], per_page: 5)
 respond_to do |format|
  format.html
 format.json { render json: @book }
 end
end

2 个答案:

答案 0 :(得分:2)

只需从

更改操作index即可
def index
 @book = Book.paginate(page: params[:page], per_page: 5)
 respond_to do |format|
  format.html
  format.json { render json: @simulation }
  end
end

def index
 @book = current_user.books.paginate(page: params[:page], per_page: 5)
 # only books that belong to a user, then paginate on those records
 respond_to do |format|
  format.html
  format.json { render json: @simulation }
  end
end

答案 1 :(得分:0)

Book.paginate加载所有图书,使用@book.paginate