通过slug和id查找

时间:2015-02-03 16:31:54

标签: ruby-on-rails ruby ruby-on-rails-4

我目前在我的产品控制器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

有办法做到这一点吗?先感谢您。

2 个答案:

答案 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::Productslug等于id的{​​{1}}。