1

FriendlyId gem を使用する Rails アプリがありますが、最近、開発とテストで NoMethodErrors が発生し始めました。この問題は最近始まったばかりで、プロジェクトを数回繰り返しています (heroku の「ステージング」はまだ機能しています)。

この問題は、フレンドリ ID 用に設定されたモデルの新しいレコードを作成する際に発生します。これらのモデルの 1 つを次に示します。

class Playlist < ActiveRecord::Base

  attr_accessible :title, :drill_tokens, :program, :order  , :get_playlists
  validates_presence_of :title
  validates_uniqueness_of :title

  has_many :playlist_items, :dependent => :destroy, :order => :id
  has_many :drills, :through => :playlist_items

  attr_reader :drill_tokens
  attr_reader :get_playlists

  def drill_tokens=(ids)
    self.drill_ids = ids.split(",")
  end

  has_friendly_id :title, :use_slug => true

end

テストの実行時に受け取るエラーは、PlaylistsController#create の NoMethodError であり、エラー メッセージの本文は次のとおりです。

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

そして、トレースはここから始まります:

friendly_id (3.2.1.1) lib/friendly_id/active_record_adapter/slug.rb:53:in `enable_name_reversion'
activesupport (3.0.7) lib/active_support/callbacks.rb:415:in `_run_save_callbacks'

「has friendly_id」行をコメントアウトすると、create 呼び出しが再び機能するため、それが Friendly_id gem に関連していることを確認しました。関連するrakeタスクも試しました: running

rake friendly_id:redo_slugs MODEL=playlist

同じエラーが発生します。代わりに、slug テーブルでダウン マイグレーションを実行し、rails g friendly_id とアップ マイグレーションを再実行してから実行します。

rake friendly_id:make_slugs MODEL=playlist

テーブルを完全に削除し、それ以降はプレイリスト#show アクションを試すだけで同じエラーが発生します。

これが十分な詳細であることを願っています。どうすれば正常な状態に戻るのか、完全に混乱しています。

4

0 に答える 0