更新
在撰写此问题时找到了解决方案。仍然发布问题以防其他人有同样的问题。我的解决方案是因为拼写错误。请参阅本文的底部和已发布的答案以获取完整代码。
原始问题
尝试在RoR webapp中实现friendlyId gem。
我已经在GitHub forum上提出了这个问题,但是在维基说明中看到我在这里发布我的问题。我确实已经搜索了一个答案并尝试了多个建议,但没有任何效果。这就是我做的。
STEPS
工作~~>已将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
修复了迁移文件~~&gt;已将class AddSlugToPosts < ActiveRecord::Migration
更改为class AddSlugToPosts < ActiveRecord::Migration[5.1]
工作~~&gt;跑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) ===================
工作~~&gt;运行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
~~&gt;
从:
def set_post
@post = Post.find(params[:id])
end
致:
def set_post
@post = Post.friendly.find(params[:id])
end
更新了post.rb
~~&gt;
来自:
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
错误~~&gt;运行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'假设是小写的,而不是大写的。我将使用我的最终代码发布一个答案,该代码适用于遇到此问题的任何其他人。
答案 0 :(得分:1)
正如我在问题的最后提到的那样。我的问题是,当我打电话在我的模型中扩展'FriendlyId'时,我有一个错字。我把最后的'd'大写了。这是我的最终代码。
的Gemfile
# Friendly URLs
gem 'friendly_id', '~> 5.1.0', require: "friendly_id"
应用程序/模型/ 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