Происхождение и rails_admin, выпадающий - PullRequest
1 голос
/ 13 ноября 2011

Я пробую Rails_Admin.Для набора статей я использую происхождение.Поэтому я хотел бы создать выпадающий список на новых страницах и страницах редактирования, чтобы я мог выбрать нужную родительскую статью.

Моя текущая конфигурация:

  config.model Article do
  #   # Found associations:

    # Found columns:
      field :id, :integer 
      field :title, :string 
      field :description, :text 
      field :content, :text do
        ckeditor true
      end
      #field :created_at, :datetime 
      #field :updated_at, :datetime 
      field :ancestry, :enum do
        @articles = Article.scoped
        @articles.arrange(:order => :created_at)
      end
    # Sections:
    list do; end
    export do; end
    show do; end
    edit do; end
    create do; end
    update do; end
  end

Итак, довольно стандартный, кромеполе enum.Я должен делать что-то не так здесь.Есть идеи?

Я уже видел Как расположить записи из дерева предков в раскрывающемся списке в Rails 3? , но если я не ошибаюсь, это довольно много запросов, которые они делают.Я хотел бы использовать функцию Arrange.

Ответы [ 5 ]

5 голосов
/ 14 октября 2012

Я написал этот плагин для управления наследством с помощью rails_admin: rails_admin_nestable .
Надеюсь будет полезно. enter image description here

1 голос
/ 23 декабря 2011

Сконфигурируйте модель в rails_admin следующим образом:

  config.model Article do
    list do
      field :title
      field :parent do
        formatted_value do
          value.title if value
        end
      end
    end

    show do
      field :title
      field :parent do
        formatted_value do
          value.title if value
        end
      end
    end

    edit do
      field :title
      field :ancestry, :enum do
        enum do
          except = bindings[:object].id
          Article.where("id != ?", except).map { |c| [ c.title, c.id ] }
        end
      end
    end
  end
1 голос
/ 18 ноября 2011

Самый простой способ достичь желаемого -

В вашей модели:

class Article < ActiveRecord::Base
  has_ancestry
  attr_accessor :parent_id
  #...
end

затем добавьте правильное поле в config.model

field :parent_id, :enum do
  enum do
    Article.select(:id).map{|article| article.id} #this is just an example though
  end
end
0 голосов
/ 17 сентября 2017

Я положил это в мой config/initializers/rails_admin.rb

    config.model 'MyModel' do
      edit do
        include_all_fields
        field :parent_id, :enum do
          enum do
            MyModel.all.map{|model| [model.name, model.id ]}.to_a
          end
        end
       exclude_fields :ancestry
      end
    end 
0 голосов
/ 09 сентября 2013

На самом деле для меня решение было:

before_validation :check_ancestry

def check_ancestry
  if self.ancestry.blank?
    self.ancestry=nil
  end
end

def percorso
  p=""
  self.ancestors.each do |n|
    p+=n.title + " -> "
  end
  p+=self.title
end

rails_admin do
  edit do
    field :ancestry, :enum do
      enum do
        except = bindings[:object].id.nil? ? 0 : bindings[:object].id
        Article.where("id != ?", except).map { |c| [ c.percorso, c.ancestry? ? "#{c.ancestry}/#{c.id}":"#{c.id}" ]}
      end
    end
  end
end
...