我已经设置了friendly_id gem,跟随它上面的RailsCasts Screencast。本地工作非常出色,我安装了它,运行User.find_each(&:save)
,成功更新了每个现有用户的slug字段,一切都很好。
我现在已将其推送到Heroku,虽然它对于添加的任何新成员都可以正常工作,但Heroku并没有为已经存在的用户更新用户slug。
正在运行heroku run console
然后User.find_each(&:save)
无效:
irb(main):001:0> User.find_each(&:save)
User Load (20.2ms) SELECT "users".* FROM "users" WHERE ("users"."id" >= 0) ORDER BY "users"."id" ASC LIMIT 1000
(23.6ms) BEGIN
(2.0ms) COMMIT
(13.6ms) BEGIN
(21.1ms) COMMIT
=> nil
models/user.rb
中的相关代码是:
extend FriendlyId
friendly_id :name, use: :slugged
def should_generate_new_friendly_id?
new_record?
end
我已经在Heroku上运行了所有数据库迁移,但它们运行良好。我检查了users
表确实有一个slug
字段,但它是空的,我不确定我在哪里出错了。如果有人碰巧遇到过这个问题,我们将非常感谢您的建议。谢谢。
答案 0 :(得分:8)
当然,这总是愚蠢的。我真的不确定我是怎么错过的:
这段代码:
def should_generate_new_friendly_id?
new_record?
end
如果更改了名称,那么可以阻止新的slu it,也停止更新以前的帖子。
我通过评论这个问题来解决这个问题,推动,运行Heroku控制台&然后User.find_each(&:save)
工作得很好,然后我没有评论代码&再次推到Heroku,一切都很花哨。
希望这有助于将来的某个人!
答案 1 :(得分:0)
就我而言,这是历史:
friendly_id :text, use: [:slugged, :history]
必须
friendly_id :text, use: :slugged
使heroku保存工作......然后我读了历史部分
答案 2 :(得分:0)
我可以通过从
更改should_generate_new_friendly_id?
方法来解决此问题
def should_generate_new_friendly_id?
title_changed?
end
到
def should_generate_new_friendly_id?
slug.nil? || title_changed?
end