необязательно принадлежит для переименованных активных ресурсов администратора


Если параметр 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

Небольшое тестовое приложение, которое повторяет ошибку:

Https://github.com/senid231/activeadmin_test_belongs_to

2 2

2 ответа:

ActiveAdmin позволяет использовать вложенные ресурсы с помощью метода belongs_to, Как вы уже ясно знаете:

ActiveAdmin.register Project do 
end

ActiveAdmin.register Ticket do
  belongs_to :project
end

ActiveAdmin.register Milestone do 
  belongs_to :project
end
Поскольку огневая мощь унаследованных ресурсов не может быть осведомлена о каждой пользовательской реализации в книге, вам, возможно, придется явно указать контроллеру ActiveAdmin, как получить доступ к дочерним ресурсам из родительского ресурса. Таким образом, ваши детские классы будут выглядеть примерно так:
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