This is because
FriendlyId‘d models don’t follow the default
to_param style of id-based lookups which ActiveAdmin expects.
However, the two are easily reconciled by changing how ActiveAdmin fetches resources. Throw this in your ActiveAdmin initializer:
# config/initializers/active_admin.rb ActiveAdmin::ResourceController.class_eval do def find_resource id_field = "id" if scoped_collection.is_a? FriendlyId id_field = scoped_collection.friendly_id_config.query_field end scoped_collection.find_by! id_field => params[:id] end end
That’ll do it. You can alternatively define
find_resource inside each registered resource’s
controller block if you want to be picky.
There may be a better way to derive the
id_field, but I don’t know it. Let me know if you do.