Edited at

STI modelでfriendly_idを使う

More than 3 years have passed since last update.


モデル毎にslugのunique判定をする

http://ruby.zigzo.com/2011/10/08/how-to-use-the-friendly_id-gem-w-sti-models/

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を使うようにする。