rails 4 gem 'mongoid_slug' 无法按 id 搜索

Posted

技术标签:

【中文标题】rails 4 gem \'mongoid_slug\' 无法按 id 搜索【英文标题】:rails 4 gem 'mongoid_slug' unable to search by idrails 4 gem 'mongoid_slug' 无法按 id 搜索 【发布时间】:2014-08-04 15:21:27 【问题描述】:

我刚刚安装了 gem 'mongoid_slug',这是模型:

class Book
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Slug

  field :_id, type: String, slug_id_strategy: lambda |id| id.start_with?('....')

  field :name, type: String
  slug :name, 
  ...
end

在控制器中,我有一个函数调用 get_book,我在编辑、显示等之前调用它 当然不行,我也试过 find_by_slug。 属性为 :id=>"try-new-book" 的类 Book 出现错误 Document not found

请求信息

请求参数"action"=>"show", "controller"=>"startups", "id"=>"try-new-book"

def get_book
  @book = Book.find_by(id: params[:id])
end

谢谢

【问题讨论】:

如果Book.find(params[:id]) 会怎样?我不清楚这个蛞蝓做什么,但 mongoid 有_id 而不是id。所以,它可能是Book.find_by(_id: params[:id])find_by_id 蛞蝓制作漂亮的网址而不是 /books/009333 它应该做 /books/try-new-book 我尝试使用 Book.find_by_id 但我收到以下错误消息:NoMethodError at /books/try-new-book undefined method `find_by_id' for Book:Class According to docs 它应该只工作Book.find params[:id] 当我尝试时:.find_by(_id: params[:id]) 我有以下错误:Mongoid::Errors::DocumentNotFound at /books/try-new-book 问题:找不到文档对于具有属性 :_id=>"try-new-book" 的类 Book。摘要:当使用属性哈希调用 Book.find_by 时,提供的所有属性必须与数据库中的文档匹配,否则将引发此错误。 【参考方案1】:

According to docs 它应该可以正常工作:

Book.find params[:id]

更新

我回答了同样的问题here。简而言之:将id.start_with?('....') 更改为id =~ /^[[:alnum:]]+$/

【讨论】:

我知道,但不知道。我试图理解。从 rails 控制台我有以下内容: irb(main):023:0> s => # id ~= \^[A-z\d]+$\ 不幸的是不起作用。我有这个错误:语法错误,意外 '=' ...ug_id_strategy: -> (id) id ~= \^[[:alnum:]]+$\ 是的,对不起,我应该是id =~ /^[[:alnum:]]+$/ 哈,才发现是重复的问题=)) 没有更多错误消息,但没有保存对本书其他变量的更改,也没有删除

以上是关于rails 4 gem 'mongoid_slug' 无法按 id 搜索的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 Auditing Gem [关闭]

Rails 4.0.0 Ruby 2.0 therubyracer gem 安装错误

为啥我不能用 gem install rails -v 4.0.0 安装 rails?

Rails rdoc Gem 错误/损坏问题

rails 4.2.0:无法在 ubuntu 14.04 上安装 pg gem

Rails 4 - 具有简单形式的依赖字段的 JS