Mongoid_slug轨道4更新/销毁对象(Mongoid_slug Rails 4 update

2019-10-20 07:48发布

我用我的Rails应用mongoig_slug宝石。

我可以创建正确的URL的对象,但我不能更新/删除对象,我必须在控制台中没有错误消息。 (I可以编辑的形式,其包含正确的数据)

我甚至用PRY在控制台检查,当我检查@book退出,是正确的,如果我做@ book.destroy它说真实的,但不破坏。 对于编辑,我也查@book,我还检查book_params这是正确的。

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

class BooksController < ApplicationController
   before_filter :get_book, only: [:show, :edit, :update, :destroy]

   def update
     if @book.update_attributes(book_params)
       redirect_to book_path(@book)
     else
       flash.now[:error] = "The profile was not saved, please try again."
       render :edit
     end
   end

   def destroy
     binding.pry
     @book.destroy
     redirect_to :back
   end

   def book_params
     params.require(:book).permit(:name)
   end

   def get_book
     @book = Book.find params[:id]
   end
end

Answer 1:

你不能只是复制该行slug_id_strategy: lambda {|id| id.start_with?('....')} slug_id_strategy: lambda {|id| id.start_with?('....')}没有改变。 你应该有一些定义是ID或者不能代替点。

从文档:

这个选项应该返回一些响应调用(可调用),并接受一个字符串参数,例如拉姆达。 如果字符串看起来像你的ID之一这个调用必须返回true。

因此,它可能是,例如:

slug_id_strategy: lambda { |id| id.start_with?('5000') } # ids quite long and start from the same digits for mongo.

要么:

slug_id_strategy: lambda { |id| =~ /^[A-z\d]+$/ }

或可能是:

slug_id_strategy: -> (id) { id =~ /^[[:alnum:]]+$/ }

更新

最新版本的mongoid_slug已经过时,你应该使用github上的版本。 因此,在您的Gemfile:

gem 'mongoid_slug', github: 'digitalplaywright/mongoid-slug'

同时更改field: _id行:

  field :_id, type: BSON::ObjectId, slug_id_strategy: lambda { |id| id =~ /^[[:alnum:]]+$/ }

原因_id类型不是一个字符串,这个错误发生。 这应该工作。



文章来源: Mongoid_slug Rails 4 update / destroy object