необязательно принадлежит для переименованных активных ресурсов администратора
Если параметр belongs_to является необязательным, то помощники url создаются с использованием методов polymorphic_path и polymorphic_link. Эти методы ничего не знают о переименовании ресурсов в active admin.
Как я могу использовать необязательный атрибут "принадлежит" для переименованного ресурса страницы
Обратный путь:
ActionView::Template::Error (undefined method `new_admin_region_country_region_city_path' for #<Admin::CitiesController:0x00000006bb1dd0>):
1: insert_tag renderer_for(:index)
actionpack (4.0.9) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url'
actionpack (4.0.9) lib/action_dispatch/routing/polymorphic_routes.rb:147:in `new_polymorphic_path'
inherited_resources (1.5.1) lib/inherited_resources/url_helpers.rb:222:in `new_resource_path'
actionpack (4.0.9) lib/abstract_controller/helpers.rb:53:in `new_resource_path'
arbre (1.0.2) lib/arbre/element.rb:180:in `method_missing'
/home/senid/.rvm/gems/ruby-2.1.2@belongs_to/bundler/gems/active_admin-a2cd9604c2d9/lib/active_admin/resource/action_items.rb:61:in `block in add_default_action_items'
/home/senid/.rvm/gems/ruby-2.1.2@belongs_to/bundler/gems/active_admin-a2cd9604c2d9/lib/active_admin/views/action_items.rb:9:in `instance_exec'
/home/senid/.rvm/gems/ruby-2.1.2@belongs_to/bundler/gems/active_admin-a2cd9604c2d9/lib/active_admin/views/action_items.rb:9:in `block (2 levels) in build'
App / admin / region_city.rb
ActiveAdmin.register RegionCity, as: 'City' do
permit_params :name, :description, :country_id
menu false
belongs_to :country, parent_class: RegionCountry, optional: true
navigation_menu :default
filter :id_eq
end
App / admin / region_country.rb
ActiveAdmin.register RegionCountry, as: 'Country' do
permit_params :name, :description
filter :id_eq
sidebar 'Links', only: [:show] do
ul do
li do
link_to 'Cities', admin_country_cities_path(country_id: resource.id)
end
end
end
end
App / models / region_city.rb
class RegionCity < ActiveRecord::Base
belongs_to :country, class_name: RegionCountry, foreign_key: :country_id
validates :name, presence: true
validates :country, presence: true
end
Приложение / модели / region_country.rb
class RegionCountry < ActiveRecord::Base
validates :name, presence: true
has_many :cities, class_name: RegionCity, foreign_key: :country_id
end
Gemfile.замок
GIT
remote: git://github.com/gregbell/active_admin.git
revision: a2cd9604c2d949f5193791045385756cee0c6865
Небольшое тестовое приложение, которое повторяет ошибку:
2 ответа:
ActiveAdmin позволяет использовать вложенные ресурсы с помощью метода
belongs_to
, Как вы уже ясно знаете:Поскольку огневая мощь унаследованных ресурсов не может быть осведомлена о каждой пользовательской реализации в книге, вам, возможно, придется явно указать контроллеру ActiveAdmin, как получить доступ к дочерним ресурсам из родительского ресурса. Таким образом, ваши детские классы будут выглядеть примерно так:ActiveAdmin.register Project do end ActiveAdmin.register Ticket do belongs_to :project end ActiveAdmin.register Milestone do belongs_to :project end
ActiveAdmin.register RegionCity, as: 'City' do belongs_to :country ...snipped.... controller do defaults :collection_name => "region_cities" end end
Поскольку ActiveAdmin использует унаследованные ресурсы в качестве источника мощность, любые дополнительные настройки, которые вам могут понадобиться в дополнение к моей помощи, будут найдены в документации по унаследованным ресурсам. Этот пример в частности находится в разделеOverwriting Defaults . IR в настоящее время не поддерживается, поэтому не удивляйтесь всем ссылкам Rails 3.
Надеюсь, это поможет!
Спасибо Колину Грейвсу за ответ выше, который был очень полезен.
У меня была проблема, когда родительский ресурс был переименован, и вот что я должен был сделать:
ActiveAdmin.register Project, as 'Enterprise' do controller do defaults collection_name: 'projects', instance_name: 'project' end end ActiveAdmin.register Ticket do belongs_to :project, param: 'enterprise_id', route_name: 'enterprise' end
defaults collection_name: 'projects', instance_name: 'project'
означало, что мне не нужно было менять всеprojects
илиproject
в существующем коде наenterprises
илиenterprise
.Параметры, переданные в
belongs_to
, позволили представлениямticket
найти ихproject
и правильно отобразить.Помощники Path & url изменились, поэтому везде, где я использовал
admin_projects_path
, у меня были заменить его наadmin_enterprises_path
и т. д.Биты кода унаследованных ресурсов, которые я нашел полезными для обнаружения доступных опций, были https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/belongs_to_helpers.rb & https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/class_methods.rb