Дружественный_id | Активная запись не найдена

Я слежу за эпизодом Railscast по красивым URL-адресам с FriendlyId.

Я использую Rails4 и использую ветку 5.0 stable в Github Repo от Friendly Id.

Я следовал Учебнику:

Моя модель Clip.rb:

extend FriendlyId
friendly_id :title, use: :slugged

Моя миграция:

rails g migration AddSlugToClips slug:string

Редактировал миграцию:

class AddSlugToClips < ActiveRecord::Migration
  def change
    add_column :clips, :slug, :string
    add_index :clips, :slug
  end
end

С пустой базой данных я пытаюсь добавить клип, и когда я пытаюсь его открыть:

введите здесь описание изображения

Что мне не хватает?

Если я напрямую получаю доступ к Vine через

http://localhost:3000/clips/1

Я попадаю на страницу шоу ..


person Mini John    schedule 03.09.2013    source источник
comment
Вы можете подтвердить, что клип добавлен?   -  person claptimes    schedule 03.09.2013
comment
Да, я вижу это в индексе и в БД.   -  person Mini John    schedule 03.09.2013


Ответы (2)


Хорошо, я нашел это, это связано с Version of Friendly Id, который вы используете.

Поисковики больше не переопределяются по умолчанию. Если вы хотите совершать дружественные находки, вы должны делать Model.friendly.find, а не Model.find..

person Mini John    schedule 03.09.2013

Это потому, что когда вы редактируете клип и меняете его название, его ярлык будет обновлен. Поэтому попробуйте запустить код со следующими изменениями.

class Clip < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, use: :slugged

  def should_generate_new_friendly_id?
    new_record?
  end
end


friendly_id :title, use: :slugged # you must do MyClass.friendly.find(params[:id])
#or
friendly_id :title, use: [:slugged, :finders] # you can now do MyClass.find(params[:id])
person Amit Sharma    schedule 03.09.2013
comment
Это только в том случае, если я РЕДАКТИРУЮ НАЗВАНИЕ клипа. Но в моем случае я загружаю новый клип и получаю сообщение об ошибке. - person Mini John; 03.09.2013
comment
Пробовали ли вы использовать этот friendly_id :title, use: :slugged # вы должны сделать MyClass.friendly.find('bar') - person Amit Sharma; 03.09.2013
comment
Эй, амит. Я наконец узнал, что было не так. Посмотрите мой ответ :) - person Mini John; 03.09.2013
comment
Хорошо, попробуйте использовать метод поиска с моим отредактированным ответом. - person Amit Sharma; 03.09.2013
comment
Начиная с версии 5.0, FriendlyId использует семантическое управление версиями. Одно из самых важных изменений, когда Finders больше не переопределяются по умолчанию. Если вы хотите выполнять дружественные поиски, вы должны использовать Model.friendly.find, а не Model.find. - person Mini John; 03.09.2013
comment
Хорошо, вместо использования @clip = Clip.find_by_slug(params[:id]) используйте friendly_id :title, use: [:slugged, :finders] @clip = Clip.find(params[:id]), потому что, если вы используете Rails4, старайтесь избегать использования методов find_by. - person Amit Sharma; 03.09.2013
comment
Я дал вам полезный ответ для попытки. Спасибо, но на самом деле это СТАРЫЕ функции Friedly ID, которые в Rails4 нам не нужно вспоминать. :) - person Mini John; 03.09.2013
comment
Вы правы, @The Mini John, я просто говорю, что мы можем использовать метод поиска, добавив аддон :finders. - person Amit Sharma; 03.09.2013