1
누구든지 트리 구조를 표시하는 데 도움이됩니다. "Element"라는 단일 테이블간에 부모 자식 연결을 만들었습니다. 또한 항목이 적절한 방식으로 저장됩니다.Ruby on rail의 트리 구조 표시
코드를 작성했지만 수준에서 작동합니다. 최적화 할 루프를 사용했기 때문에 빠른 솔루션을 사용할 수있는 코드가 필요합니다.
class Element
include Mongoid::Document
validates :name, presence: true
field :name, type: String
field :description, type: String
field :top, type: String
has_many :media_files
has_and_belongs_to_many :parents, :class_name => 'Element'
has_and_belongs_to_many :childrens, :class_name => 'Element'
def self.js_tree
json_data = Array.new
elements = Element.where(top: "true")
get_inner_elements elements, json_data
return json_data.uniq {|e| e[:id] }.to_json
end
def self.get_inner_elements elements, json_data
elements.each do |element|
single_element element, json_data
element.childrens.each do |inner_element_one|
single_element inner_element_one, json_data, element.id
inner_element_one.childrens.each do |inner_element_two|
single_element inner_element_two, json_data, inner_element_one.id
inner_element_two.childrens.each do |inner_element_three|
single_element inner_element_three, json_data, inner_element_two.id
inner_element_three.childrens.each do |inner_element_four|
single_element inner_element_four, json_data, inner_element_three.id
end
end
end
end
end
return json_data
end
def self.single_element element, json_data, parent=nil
json_data << {
:id => "#{element.id}",
:parent => "#{parent.nil? ? '#' : parent}",
:a_attr=> { class: "foldor-icon" },
:text => "#{element.name}"
}
element.media_files.each do |mf|
json_data << {
:id => "file_#{element.id}_#{mf.id}",
:parent => "#{element.id}",
:text => mf.file_filename,
:icon => mf.icon,
}
end
return json_data
end
end
프런트 엔드는 :
<script type="text/javascript">
data = $.parseJSON('<%= raw Element.js_tree %>')
$('#container').jstree({
'core' : {
'data' : data
}
});
</script>
get_inner_elements 사람은 그 적용 드릴 수 없습니다 사용하는 것을 재귀 필요가 있음을 수행하는 방법을 제안 해주십시오 최적화 될 필요가있다.
Thannks