【发布时间】: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(&: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(&: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', '~> 5.1.0', require: "friendly_id"
错误:NameError (uninitialized constant Post::FriendlyID)
任何想法将不胜感激。
解决方案
当我写这篇文章并查看我的代码时,我意识到我的错误是由于拼写错误造成的。我输入了extend FriendlyID 而不是extend FriendlyId。请注意,最后的 'd' 应该是小写的,而不是大写的。我将使用我的最终代码发布答案,该代码适用于遇到此问题的任何其他人。
【问题讨论】: