【问题标题】:uninitialized constant Post::FriendlyID未初始化的常量 Post::FriendlyID
【发布时间】:2018-04-04 21:57:33
【问题描述】:

更新

在编写此问题时找到了解决方案。仍然发布问题以防其他人有同样的问题。我的解决方案是因为错字。有关完整代码,请参阅这篇文章的底部和发布的答案。

原始问题

尝试在 RoR webapp 中实现 friendlyId gem。

我已经在GitHub forum 上问过这个问题,但是在 Wiki 注释中看到我在这里发布了我的问题。我确实已经搜索了一个答案并尝试了多个建议,但没有任何效果。这就是我所做的。

步骤

工作 ~~> 将 gem 'friendly_id', '~> 5.1.0' 添加到我的 Gemfile 并运行 bundle install 工作了~~>跑了rails g friendly_id

$ rails g friendly_id
  create  db/migrate/20180404164213_create_friendly_id_slugs.rb
  create  config/initializers/friendly_id.rb

修复了迁移文件~~>将class AddSlugToPosts < ActiveRecord::Migration更改为class AddSlugToPosts < ActiveRecord::Migration[5.1]

工作了~~>跑了rake db:migrate

$ rake db:migrate
== 20180404164213 CreateFriendlyIdSlugs: migrating ============================
-- create_table(:friendly_id_slugs)
   -> 0.0246s
-- add_index(:friendly_id_slugs, :sluggable_id)
   -> 0.0048s
-- add_index(:friendly_id_slugs, [:slug, :sluggable_type])
   -> 0.0035s
-- add_index(:friendly_id_slugs, [:slug, :sluggable_type, :scope], {:unique=>true})
   -> 0.0031s
-- add_index(:friendly_id_slugs, :sluggable_type)
   -> 0.0029s
== 20180404164213 CreateFriendlyIdSlugs: migrated (0.0392s) ===================

工作了~~>跑rails g migration add_slug_to_posts slug:string:uniq然后跑rake db:migrate

$ rails g migration add_slug_to_posts slug:string:uniq
      invoke  active_record
      create    db/migrate/20180404164731_add_slug_to_posts.rb
$ rake db:migrate
== 20180404164731 AddSlugToPosts: migrating ===================================
-- add_column(:posts, :slug, :string)
   -> 0.0078s
-- add_index(:posts, :slug, {:unique=>true})
   -> 0.0042s
== 20180404164731 AddSlugToPosts: migrated (0.0123s) ==========================

更新posts_controller.rb ~~> 来自:

def set_post
   @post = Post.find(params[:id])
end

收件人:

def set_post
   @post = Post.friendly.find(params[:id])
end

更新post.rb ~~> 来自:

class Post < ApplicationRecord
  belongs_to :member

  Status = ['Draft', 'Under Review', 'Edits Needed', 'Completed']

  validates_with FeaturedValidator
end

收件人:

class Post < ApplicationRecord
  extend FriendlyID
  friendly_id :title, use: :slugged

  belongs_to :member

  Status = ['Draft', 'Under Review', 'Edits Needed', 'Completed']

  validates_with FeaturedValidator
end

ERROR ~~> 运行 rails c 以打开控制台以更新以前的帖子以获取 slug。运行 Post.find_each(&amp;:save) 并收到此错误。

2.5.0 :001 > Post.find_each(&:save)
Traceback (most recent call last):
        3: from (irb):1
        2: from app/models/post.rb:1:in `<top (required)>'
        1: from app/models/post.rb:8:in `<class:Post>'
NameError (uninitialized constant Post::FriendlyID)

研究并退出控制台并尝试spring stop,结果表明spring没有运行。然后我尝试了以下操作并每次都重新启动控制台,然后再尝试Post.find_each(&amp;:save)

我尝试将extend FriendlyID 更改为extend ::FriendlyID

错误NameError (uninitialized constant FriendlyID)

我尝试在开头添加require "friendly_id"

错误NameError (uninitialized constant Post::FriendlyID)

我两个都试过了。

错误NameError (uninitialized constant FriendlyID)

然后我在某处看到require: "friendly_id" 应该在 Gemfile 而不是模型中。所以,我在那里删除了它并将它添加到 Gemfile 中,如下所示:gem 'friendly_id', '~&gt; 5.1.0', require: "friendly_id"

错误NameError (uninitialized constant Post::FriendlyID)

任何想法将不胜感激。

解决方案

当我写这篇文章并查看我的代码时,我意识到我的错误是由于拼写错误造成的。我输入了extend FriendlyID 而不是extend FriendlyId。请注意,最后的 'd' 应该是小写的,而不是大写的。我将使用我的最终代码发布答案,该代码适用于遇到此问题的任何其他人。

【问题讨论】:

    标签: ruby-on-rails friendly-id


    【解决方案1】:

    正如我在问题末尾提到的那样。我的问题是在我的模型中调用扩展“FriendlyId”时出现了拼写错误。我将最后的“d”大写。这是我的最终代码。

    宝石文件

    # Friendly URLs
    gem 'friendly_id', '~> 5.1.0', require: "friendly_id"
    

    app/models/post.rb

    class Post < ApplicationRecord
      extend FriendlyId
      friendly_id :title, use: :slugged
    
      belongs_to :member
    
      Status = ['Draft', 'Under Review', 'Edits Needed', 'Completed']
    
      validates_with FeaturedValidator
    end
    

    app/controllers/post_controller.rb ~~把def set_post改成

    def set_post
      @post = Post.friendly.find(params[:id])
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多