我是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
希望我在这里的第一篇文章/问题清晰简洁,以便得到我正在寻找的答案!
由于
汤姆
答案 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")