我下载了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
供参考,这是他们的指南。
当然,我还没有生成迁移,因为我已经创建了这个表。
我不确定下一步应该是什么?
感谢您的帮助。
答案 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