Rails:带有acts_as_taggable_on的标签上的Friendly_id

时间:2016-03-14 08:57:24

标签: ruby-on-rails acts-as-taggable-on friendly-id

我在轨道4上,我正在尝试使用slug使我的标签更漂亮。

我遵循了question。但它不起作用。这是我的代码。

我为我的代码栏生成了一个slu ..

class AddSlugTotaggings < ActiveRecord::Migration
  def change
    add_column :tags, :slug, :string
    add_index :tags, :slug
  end
end

我创建了一个初始化器:

ActsAsTaggableOn::Tag.class_eval do
  extend FriendlyId

  friendly_id :name, use: :slugged
end

但是当我在控制台中检查我的标签时,slug列是零。

例如,从命令行:

Tag.find(1)return:

SELECT  "tags".* FROM "tags" WHERE "tags"."id" = ? LIMIT 1  [["id", 1]]
 => #<Tag id: 1, name: "testtag", taggings_count: 1, slug: nil>

编辑:

这是我的控制器:tags_controller.rb

class TagsController < ApplicationController

  def index
    @tags = ActsAsTaggableOn::Tag.all
  end

  def show
    @tag =  ActsAsTaggableOn::Tag.find(params[:id])
    @pins = Pin.tagged_with(@tag.name)
  end

end

当我访问url / tags / 1时效果很好。但是,如果我尝试访问/标签/启动它不起作用是错误:

Couldn't find ActsAsTaggableOn::Tag with 'id'=startup

1 个答案:

答案 0 :(得分:1)

默认情况下,当前版本的FriendlyId不再覆盖查找程序。

相反,你会使用:

Tag.friendly_find(1)

如果您真的需要FriendlyId 4样式查找器,那么可以添加查找器插件:

ActsAsTaggableOn::Tag.class_eval do
  extend FriendlyId
  friendly_id :name, use: [:slugged, :finders]
end