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 =~ /^[[:alnum:]]+$/
哈,才发现是重复的问题=))
没有更多错误消息,但没有保存对本书其他变量的更改,也没有删除以上是关于rails 4 gem 'mongoid_slug' 无法按 id 搜索的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4.0.0 Ruby 2.0 therubyracer gem 安装错误
为啥我不能用 gem install rails -v 4.0.0 安装 rails?