我目前在我的产品控制器show action中有以下内容:
@product = Spree::Product.active.where(slug: params[:id]).first!
这只适用于slug传递,我希望能够传入id或slug并使其工作:
有点像:
Spree::Product.active.where(slug: params[:id]).first! || Spree::Product.active.where(id: params[:id]).first!
现在,当我输入products/foo-bar
时,它可以正常工作,而不是在我输入products/1
有办法做到这一点吗?先感谢您。
答案 0 :(得分:2)
.first!
找不到记录时引发错误。 尝试
Spree::Product.active.find_by(slug: params[:id]) || Spree::Product.active.find_by(id: params[:id])
如果第一次没有返回值
,它将尝试第二次查询答案 1 :(得分:1)
最简单的方法是在where
中搜索两者:
Spree::Product.active.where("slug = :parameter OR id = :parameter", parameter: params[:id]).first!
这会找到Spree::Product
或slug
等于id
的{{1}}。