3

RailsCasts Screencastに従って、 Friendly_id gemをセットアップしました。これはローカルで見事に機能し、インストールして実行し、既存の各ユーザーのスラッグフィールドを正常に更新しましたが、すべて問題ありませんでした。User.find_each(&:save)

これを Heroku にプッシュしました。追加された新しいメンバーには問題なく機能しますが、Heroku は既存のユーザーのユーザー スラッグを更新しません。

実行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 ですべての DB 移行を実行しましたが、うまくいきました。チェックしたところ、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

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 に答える