3

我已经设置了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字段,但它是空的,我不确定我在哪里出错了。如果有人碰巧以前遇到过这种情况,任何建议将不胜感激。谢谢你。

4

3 回答 3

8

当然,这总是一些愚蠢的事情。我真的不知道我是怎么错过的:

这段代码:

def should_generate_new_friendly_id?
  new_record?
end

如果更改名称,它会阻止新的蛞蝓制造,也会阻止它更新以前的帖子。

我通过注释掉这个问题解决了这个问题,推送,运行 Heroku 控制台然后User.find_each(&:save)工作得很好,然后我取消注释代码并再次推送到 Heroku,一切都很花哨。

希望这可以帮助将来的人!

于 2012-06-09T00:56:48.047 回答
0

就我而言,这是历史:

friendly_id :text, use: [:slugged, :history]

必须是

friendly_id :text, use: :slugged

为了让heroku保存工作......然后我阅读了历史部分

于 2014-06-06T13:16:17.880 回答
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
于 2015-10-25T06:25:14.840 回答