モデル毎にslugのunique判定をする
validatesのuniquenessと似た感じで、scopeを使う。
STI modelではtypeカラムでモデル毎のデータを表しているので、scopeにtypeを指定する。
以下の様に、継承元のモデルでfriendly_idに指定する。
hoge.rb
class Hoge < ActiveRecord::Base
extend FriendlyId
friendly_id :from_data,
use: [:slugged, :finders, :scoped],
scope: :type
end
モデル検索
2014/11/23 追記
パターン1
friendly_id :foo, use: :slugged # you must do MyClass.friendly.find('bar')
パターン2
friendly_id :foo, use: [:slugged, :finders] # you can now do MyClass.find('bar')
STI(単一テーブル継承)使っているモデルだと、子モデルでfindersが有効にならないようでfindメソッドにslugの値を入れても検索してもRecordNotFoundとなる。
なので、パターン1を使うようにする。