ruby-on-rails - 通过 slug 和 id 查找

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

我目前在我的产品 Controller 显示操作中有以下内容:

@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

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

最佳答案

.first!

找不到记录时引发错误。 尝试

Spree::Product.active.find_by(slug: params[:id]) || Spree::Product.active.find_by(id: params[:id])

如果第一次没有返回值,它会尝试第二次查询

关于ruby-on-rails - 通过 slug 和 id 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303965/

相关文章:

html - 在 Ruby on Rails 中指定样式表

ruby-on-rails - 从 Github 指定 fork 版本的 gem 时出现“找不到 gem”错误

mysql - 使用 Ruby 插入二进制数据的 SQL 查询

ruby-on-rails - declarative_authorization 和命名空间

ruby - Rake 在 cronjob 中无法正常运行

ruby-on-rails - 为不使用 Mechanize/Ruby 表单的站点输入登录信息

ruby-on-rails - 通过关联使用 has_many 创建获取 NoMethodError(未定义方法 `name' 为 nil :NilClass)

ruby-on-rails - 如何在 Rails 4 中合并(链接)2 个不同表上的关系

mysql - Rails 4.0 将数组和字符串保存到单列

ruby-on-rails - 在不同版本的两个 Rails 应用程序之间共享设计 session cookie