Activeadmin has_many

时间:2013-02-22 04:18:20

标签: ruby-on-rails activeadmin self-reference

我有一个与另一个模型“WindowItems”具有has_many关系的模型“Window”。 WindowItems具有自引用关系(因此它可以嵌套自己的子项)。

我有一个像这样的窗口的activeadmin资源:

show :title => :name do

attributes_table do
  row :name
  row :column_position
  row :window_type
  row :column_count
  row :active
  row :page_position
  row :collapsible
  row :icon_id
  row :created_at
  row :updated_at
end

div :class => "accordion" do
  if window.window_items.count > 0
    panel "Window Items (#{window.window_items.count})" do

      table_for window.window_items do
        column "Name" do |a|
          link_to a.name, admin_window_item_path(a.id)
        end
        column :active
        column :link
        column :icon
        column :window
      end
    end
  end
end # end accordion

现在,这是显示所有窗口项目,但我只希望它显示父窗口项目(关闭子窗口项目)。

如何过滤“窗口项目阻止”面板上显示的记录?

由于

2 个答案:

答案 0 :(得分:0)

我认为如果你将一个parent_id添加到你的WindowItem模型中,你的问题就会很容易解决。所有嵌套的子节点都有parent_id引用其父级,其中顶级项目没有parent_id。

答案 1 :(得分:0)

我终于明白了。我刚刚在模型中添加了一个范围,然后引用了该范围。

范围:

scope :is_parent, where('parent_window_item_id IS NULL || parent_window_item_id = ""')

并在activeadmin资源中:

table_for window.window_items.is_parent do
....
end