祖先とrails_admin、ドロップダウン

I'm trying out Rails_Admin. For a set of articles, I'm using ancestry. Therefore, I would like to create a dropdown list in the new&edit pages, making me able to select the right parent article.

私の現在の設定:

  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のドロップダウンリストにあるAncestryツリーからのエントリ?しかし、私が間違っているのでなければ、それは彼らがしているかなりのクエリです。私はアレンジ機能を利用したいと思います。

1

5 答え

I wrote this plugin to manage ancestry with rails_admin: rails_admin_nestable.
I hope will be useful. enter image description here

5
追加された

あなたが望むものを実現する最も簡単な方法は、

あなたのモデルでは:

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
1
追加された

次のように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
追加された
小さな更新:except = bindings [:object] .id.nil? ? 0:bindings [:object] .id
追加された 著者 quatermain,

I put this in my 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
追加された

実際は私にとって解決策は次のとおりでした:

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
0
追加された