1

我有一个使用 FriendlyId gem 的 rails 应用程序,最近我开始在开发和测试中遇到 NoMethodErrors。这个问题最近才开始,我们对项目进行了几次迭代(heroku 上的“staging”仍在工作)。

为友好 ID 设置的任何模型创建新记录时会出现问题。这是其中一种模型:

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'

我已经确认它与friendly_id gem 有关,因为注释掉'hasfriendly_id' 行并且创建调用再次起作用。我也尝试过相关的 rake 任务:运行

rake friendly_id:redo_slugs MODEL=playlist

给我同样的错误。或者,在 slugs 表上运行向下迁移并重新运行 rails g friendly_id 和向上迁移,然后运行

rake friendly_id:make_slugs MODEL=playlist

完全杀死了桌子,从那时起只尝试 playlist#show 动作就会给出同样的错误。

希望这是足够的细节。我对如何回到工作状态感到非常困惑。

4

0 回答 0