在Heroku上的Rails Friendly_Id,Heroku没有更新slug

时间:2012-06-09 00:43:12

标签: ruby-on-rails heroku friendly-id

我已经设置了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字段,但它是空的,我不确定我在哪里出错了。如果有人碰巧遇到过这个问题,我们将非常感谢您的建议。谢谢。

3 个答案:

答案 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