activeadmin / activeadmin/activeadmin-mongoid

breadcrumb for embedded documents

オープン
#146 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Ruby
スター
195
フォーク
200
PR マージ指標
30日以内にマージされた PR はありません

説明

I create a class to override the default helper.

Use case:

```ruby
# Models
class Company
include Mongoid::Document

embeds_many :catalogs, { class_name: 'Company::Catalog' }
end

class Company::Catalog
include Mongoid::Document

embedded_in :company

breadcrumb do
mongoid_breadcrumb_links
end
end

# ActiveAdmin
ActiveAdmin.register Company do
end

ActiveAdmin.register Company::Catalog, as: 'Catalog' do
belongs_to :company
end
```

```ruby
module ActiveAdmin::ViewHelpers::BreadcrumbHelper
# Returns an array of links to use in a breadcrumb
def mongoid_breadcrumb_links(path = request.path)
# remove leading "/" and split up the URL
# and remove last since it's used as the page title
parts = path.split('/').select(&:present?)[0..-2]

resources = []

parts.each_with_index.map do |part, index|
# 1. try using `display_name` if we can locate a DB object
# 2. try using the model name translation
# 3. default to calling `titlecase` on the URL fragment
if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
parent = active_admin_config.belongs_to_config.try :target
config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
parent_resource = resources.last
##
# main difference from https://github.com/activeadmin/activeadmin/blob/646bf004782e4eae912ff8821f36db691f49fcfb/lib/active_admin/view_helpers/breadcrumb_helper.rb
resources << if parent_resource
collection = parent_resource.send(config.resource_name.collection)
collection.find part
else
config.find_resource part
end
##
name = display_name resources.last
end

name ||= I18n.t "activerecord.models.#{part.singularize}",
{ count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase }

# Don't create a link if the resource's show action is disabled
if !config || config.defined_actions.include?(:show)
link_to name, '/' + parts[0..index].join('/')
else
name
end
end
end
end
```
> **TIP**: Disable `company` filter in `ActiveAdmin.register Company::Catalog` because Formtastic doen't work very well with embedded reference.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。