我下载了friendly_id gem,以使我的URL更加用户友好。为了尊重他们的指示,我在这里问这个问题,而不是在GitHub上。
以下是我的Show方法
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作为参考,这里是他们的指南。
当然,我还没有生成迁移,因为我已经创建了表。
我不确定我的下一步应该是什么?
谢谢你的帮助。
发布于 2014-12-22 11:19:21
您需要运行迁移以将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列。
发布于 2017-03-10 22:16:50
Marina说你必须添加slug字段是正确的。
但是很多人对此感到困惑,因为FriendlyID会生成包含sluggable_id和sluggable_type字段的friendly_id_slugs表。
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基本上,它为历史模块生成friendly_id_slugs表。看看他们关于History__Avoiding_404_s_When_Slugs_Change的文档:http://norman.github.io/friendly_id/file.Guide.html#History__Avoiding_404_s_When_Slugs_Change
发布于 2016-02-09 04:39:10
如果您要开始使用新表,您还可以这样做:
class CreateMovies < ActiveRecord::Migration
def change
create_table :movies do |t|
...
t.string :slug
t.index :slug, unique: true, using: :btree
end
end
endhttps://stackoverflow.com/questions/25592370
复制相似问题