如何按用户按类别对帖子进行排序?

时间:2017-07-28 13:02:45

标签: ruby-on-rails ruby

我是Ruby on Rails的新手,我一直致力于一个应用程序,Funko pops的收藏家可以登录并记录他们拥有的Funko pop。它非常简单,只有几个字段可以输入有关funkos本身的信息;标题,描述和类别以及上传funko图像的功能,以便用户主屏幕显示几乎像一个架子,所有的funkos都在上面。

反正。我内置了功能,允许用户按类别对主屏幕进行排序,因此如果用户点击下拉菜单并选择“Marvel”,那么他们应该会看到他们拥有的所有Marvel funko pop。如果他们没有带有“Marvel”类别的Funkos,则会显示一条消息,说明此类别中没有funkos。此功能非常有效,但是当我创建新用户并登录并按类别排序时,它会显示所选类别但所有用户中的所有Funkos。

我希望能够按类别按用户显示funkos,因此用户输入的所有funkos都应该使用类别下拉列表进行排序。

以下是主控制器的代码:

class FunkosController < ApplicationController
before_action :find_funko, only:[:show, :edit, :update, :destroy]

def index
    if user_signed_in? && params[:category].blank?
        @funkos = Funko.where(:user_id => current_user.id).all.order("created_at DESC")
    elsif params[:category].present?
        @category_id = Category.find_by(name: params[:category]).id                    
        @funkos = Funko.where(:category_id => @category_id).order("created_at DESC")
    else
    end
end

def show
end

def new
    @funko = current_user.funko.build
    @categories = Category.all.map{ |c| [c.name, c.id]}
end

def create
    @funko = current_user.funko.build(funko_params)
    @funko.category_id = params[:category_id]
    if @funko.save
        redirect_to root_path
    else
        render 'new'
    end
end

def edit
    @categories = Category.all.map{ |c| [c.name, c.id]}
end

def update
    @funko.category_id = params[:category_id]
    if @funko.update(funko_params)
        redirect_to funko_path(@funko)
    else
        render 'edit'
    end
end

def destroy
    @funko.destroy
    redirect_to root_path
end

private
    def funko_params
        params.require(:funko).permit(:title, :description, :category_id, :funko_img)
    end

    def find_funko
        @funko = Funko.find(params[:id])
    end
end

希望我在这里的第一篇文章/问题清晰简洁,以便得到我正在寻找的答案!

由于

汤姆

1 个答案:

答案 0 :(得分:1)

  

但是,当我创建新用户并登录并按类别排序时,它   显示所选类别中的所有Funkos,但适用于所有用户。

问题出在这里

@funkos = Funko.where(:category_id => @category_id).order("created_at DESC")

如果存在funkos,则不会为每位用户提取params[:category]。添加它,你很高兴

@funkos = Funko.where(:category_id => @category_id, :user_id => current_user.id).order("created_at DESC")