2

我已经在我的 Rails 4 应用程序中成功地使用了friendly_id 和多个模型。我以前有两个模型,我决定合并(终端和位置)。Terminals 显示操作以前使用friendly_id,我可以在其中访问/terminals/albany 并使用slug 'albany' 获取终端。

我已经完成了大部分重构以压缩到仅位置,并且在最后一块(修复视图)。在此过程中,我一直在 Rails Console 中测试并使用 rspec,一切似乎都按预期工作。还有其他模型仍然可以按预期工作。

现在我正在处理 Locations 的新显示页面,尝试访问 /locations/albany 时出现以下错误:

ActiveRecord::RecordNotFound in LocationsController#show
Couldn't find Location with id=albany

但是,当我访问 /locations/5 时,它成功加载了记录。它也适用于 Rails 控制台:

Location.find(5)                 # returns the correct location object
Location.find(5).slug            # returns 'albany'
Location.friendly.find('albany') # returns the correct location object

当我查看 Rails dbconsole 中生成的 slug 时,它们看起来都是正确生成的,并且没有重复。

这是我的模型:

Class Location < ActiveRecord::Base
  extend FriendlyId
  friendly_id :slug_candidates, use: [:slugged, :history]

  def slug_candidates
    [
      :name,
      [:name, :zip],
      [:name, :zip, :location_type],
    ]
  end
end

这是我的控制器中的显示操作:

def show
  @locations = Location.friendly.find(params[:id])
end

我难住了!有什么提示吗?

4

1 回答 1

0

您是否尝试添加:finders?

friendly_id :slug_candidates, use: [:slugged, :history, :finders]
于 2014-01-22T20:01:03.067 回答