friendly-id:电影的未定义方法slug

时间:2014-08-31 13:20:06

标签: ruby-on-rails ruby url slug friendly-id

我下载了friendly_id gem,以使我的网址更加用户友好。为了兑现他们的指示,我在这里问这个而不是GitHub。

这是我的Show Method

def show
  @movie = Movie.friendly.find(params[:id])
end

这符合他们的文件

Finders are no longer overridden by default. If you want to do friendly finds, you must
do Model.friendly.find rather than Model.find. You can however restore FriendlyId 
4-style finders by using the :finders addon:

在我的Model.rb文件中,我有以下

extend FriendlyId
friendly_id :title, use: :slugged

从他们的文档中

friendly_id :foo, use: :slugged # you must do MyClass.friendly.find('bar')

也来自他们的文档

def set_restaurant
  @restaurant = Restaurant.friendly.find(params[:id])
end

供参考,这是他们的指南。

当然,我还没有生成迁移,因为我已经创建了这个表。

我不确定下一步应该是什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:16)

您需要运行迁移以将slug列添加到表中:

class AddSlugToMovies < ActiveRecord::Migration
  def change
    add_column :movies, :slug, :string, unique: true
  end
end

运行rake db:migrate,然后在rails控制台中运行Move.find_each(&:save)以填充slug列。

答案 1 :(得分:2)

Marina是正确的,您必须添加slug字段。

但很多人都感到困惑,因为FriendlyID生成friendly_id_slugs表,其中包含sluggable_id和sluggable_type字段。

create_table "friendly_id_slugs", force: :cascade do |t|
t.string   "slug",                      null: false
t.integer  "sluggable_id",              null: false
t.string   "sluggable_type", limit: 50
t.string   "scope"
t.datetime "created_at"
t.index ["slug", "sluggable_type", "scope"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type_and_scope", unique: true
t.index ["slug", "sluggable_type"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type"
t.index ["sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_id"
t.index ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type"
end

基本上它会为History Module生成friendly_id_slugs表。 查看有关历史_Avoiding_404_s_When_Slugs_Change http://norman.github.io/friendly_id/file.Guide.html#History__Avoiding_404_s_When_Slugs_Change

的文档

答案 2 :(得分:0)

如果您开始使用新表格,您也可以这样做:

class CreateMovies < ActiveRecord::Migration
  def change
    create_table :movies do |t|
      ...
      t.string :slug
      t.index :slug, unique: true, using: :btree
    end
  end
end