Rails4.2.8集成Friendly_id 5.1.0出现undefined method `slug'错误求助
嘿,这个问题我太熟悉了!你碰到的NoMethodError是因为数据库里还没给users表加上FriendlyId用来存储slug的字段——虽然你已经装了gem、配置了模型,但漏掉了最关键的「给数据库加字段」这一步。咱们一步步来搞定:
你用的是FriendlyId ~>5.1.0版本,当你在模型里配置use: :slugged时,它需要你的users表有一个slug字符串字段来存储生成的友好URL标识。你之前直接跑了rake db:migrate,但根本没有生成添加这个字段的迁移文件,所以创建用户时程序找不到slug方法,自然报错。
停止当前的Rails服务器
先把rails s停掉,不然迁移可能会和运行中的服务冲突。生成添加slug字段的迁移文件
在终端运行这条命令,专门给users表加slug字段:rails generate migration AddSlugToUsers slug:string:index这条命令会在
db/migrate目录下生成一个类似2024xxxxxx_add_slug_to_users.rb的迁移文件,内容是自动生成的,不用修改:class AddSlugToUsers < ActiveRecord::Migration def change add_column :users, :slug, :string add_index :users, :slug, unique: true end end执行迁移,把字段加到数据库里
继续在终端跑:rake db:migrate(可选)给已有用户补生成slug
如果你的数据库里已经存在用户,需要给他们批量生成slug。打开Rails控制台:rails c然后执行:
User.find_each(&:save)这条命令会遍历所有用户,触发FriendlyId的slug生成逻辑,把slug值存入数据库。
重启Rails服务器,测试创建用户
现在再启动rails s,创建新用户就不会再出现那个错误啦!
以后如果给其他模型加FriendlyId,也要记得先给对应表加slug字段哦——FriendlyId不会自动帮你加这个,得手动生成迁移~
内容的提问来源于stack exchange,提问作者SylorHuang

