You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用params[:id]筛选Product元素失效,求排查问题原因

问题原因与解决方案

嘿,这个坑我之前踩过,咱们来理清楚到底咋回事:

核心问题:类型不匹配

params里的所有参数默认都是字符串类型,而你的category_id是数据库里的整数字段。当你写x[:category_id] == params[:id]时,本质是拿整数和字符串做相等比较——Ruby里这俩类型不同,结果肯定是false,自然查不到数据。

而你换成固定值1的时候,1是整数类型,和category_id的类型一致,所以能匹配到符合条件的产品。

额外优化:别用Ruby层面的筛选,让数据库干活

你现在用的Product.select { ... }是Ruby数组的select方法(因为传了块),它会先把数据库里所有Product记录都加载到内存,再逐个筛选。数据量小的时候还好,数据量大的话性能会崩掉,完全没必要。

正确的写法

直接用Rails ActiveRecord的where方法,让数据库层面做筛选,既高效又自动处理类型转换:

def show
  products = Product.where(category_id: params[:id])
  render json: products
end

Rails知道category_id是整数字段,会自动把params[:id]转成整数再生成SQL查询,完美解决类型问题,还能大幅提升性能。

如果非要用Ruby层面的筛选(不推荐),也可以手动把参数转成整数:

def show
  products = Product.select { |x| x[:category_id] == params[:id].to_i }
  render json: products
end

但还是强烈建议用where的写法,这才是Rails的正确打开方式~

内容的提问来源于stack exchange,提问作者RetupK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:37:43