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

Ruby on rails 如何按用户类别对帖子进行排序?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是RubyonRails的新手,我一直在开发一个应用程序,FunkoPops的收集者可以登录并记录他们拥有的FunkoPops。这很简单,只有几个字段可以输入有关funkos本身的信息;标题、描述和分类,以及上传funko图像的功能,这样用户的主屏幕几乎像一个架子一样显示,所有funko都打开了 无论如何。我有内置的功能,允许用户按类别对主屏幕进行排序,因此,如果用户单击下拉菜单并选择“惊奇漫画”,那么他们应该会看到他们拥有的所有惊奇漫画funko POP。如果他们没有“惊奇”类别的Funko

我是RubyonRails的新手,我一直在开发一个应用程序,FunkoPops的收集者可以登录并记录他们拥有的FunkoPops。这很简单,只有几个字段可以输入有关funkos本身的信息;标题、描述和分类,以及上传funko图像的功能,这样用户的主屏幕几乎像一个架子一样显示,所有funko都打开了

无论如何。我有内置的功能,允许用户按类别对主屏幕进行排序,因此,如果用户单击下拉菜单并选择“惊奇漫画”,那么他们应该会看到他们拥有的所有惊奇漫画funko POP。如果他们没有“惊奇”类别的Funkos,则会出现一条消息,说明该类别中没有Funkos。此功能非常有效,但是当我创建一个新用户并登录,并按类别排序时,它会显示所选类别中的所有funko,但对所有用户来说都是如此

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

以下是主控制器的代码:

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
class FunkosControllercurrent\u user.id).all.order(“在描述时创建”)
elsif参数[:类别]。是否存在?
@category_id=category.find_by(name:params[:category]).id
@funkos=Funko.where(:category\u id=>@category\u id).order(“在DESC创建”)
其他的
结束
结束
def秀
结束
def新
@funko=当前_user.funko.build
@categories=Category.all.map{| c |[c.name,c.id]}
结束
def创建
@funko=当前用户.funko.build(funko\u参数)
@funko.category_id=参数[:category_id]
如果@funko.save
将\重定向到根\路径
其他的
呈现“新”
结束
结束
定义编辑
@categories=Category.all.map{| c |[c.name,c.id]}
结束
def更新
@funko.category_id=参数[:category_id]
如果@funko.update(funko_参数)
重定向到funko路径(@funko)
其他的
渲染“编辑”
结束
结束
def销毁
@funko.destroy
将\重定向到根\路径
结束
私有的
def funko_params
参数要求(:funko).permit(:title,:description,:category\u id,:funko\u img)
结束
def find_funko
@funko=funko.find(参数[:id])
结束
结束
希望我在这里的第一个帖子/问题足够清晰和简洁,能够得到我想要的答案

谢谢

汤姆

但是,当我创建一个新用户并登录,并按类别排序时,它 显示所选类别中除所有用户外的所有Funko

问题就在这里

@funkos = Funko.where(:category_id => @category_id).order("created_at DESC")
如果存在
params[:category]
,则您不会为每个用户获取
funkos
。再加上这个,你就可以走了

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

太神了非常感谢你!