【问题标题】: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 时,提供的所有属性必须与数据库中的文档匹配,否则将引发此错误。

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


【解决方案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:]]+$/
  • 哈,才发现是重复的问题=))
  • 没有更多错误消息,但没有保存对本书其他变量的更改,也没有删除
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2012-08-14
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多