友好 id:电影的未定义方法 slug
Posted
技术标签:
【中文标题】友好 id:电影的未定义方法 slug【英文标题】:friendly-id: Undefined method slug for Movie 【发布时间】:2014-10-24 21:18:15 【问题描述】:我下载了friendly_id gem 以使我的网址更加用户友好。为了遵守他们的指示,我在这里而不是在 GitHub 上提出这个问题。
这是我的展示方法
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
作为参考,这里是他们的指南。
当然,我还没有生成迁移,因为我已经创建了表。
我不确定下一步应该做什么?
感谢您的帮助。
【问题讨论】:
可能会有帮助:railscasts.com/episodes/314-pretty-urls-with-friendlyid 正如文档所说,您需要一个slug
列
谢谢大家,我去看看视频
【参考方案1】:
您需要运行迁移以将 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 列。
【讨论】:
令我感到惊讶的是(据我所知)文档中没有任何地方。 里面有点像:rails generate scaffold user name:string slug:string:uniq
【参考方案2】:
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
【讨论】:
【参考方案3】:如果您开始使用新表格,您也可以这样做:
class CreateMovies < ActiveRecord::Migration
def change
create_table :movies do |t|
...
t.string :slug
t.index :slug, unique: true, using: :btree
end
end
end
【讨论】:
以上是关于友好 id:电影的未定义方法 slug的主要内容,如果未能解决你的问题,请参考以下文章
Rspec 测试:NoMethodError - nil.Nilclass 的未定义方法“id”