Hi, seem to keep running into a wall here. I can't find any resources on
site navigation that can deal with any model being in the nav, allow
nesting, and can dynamically update.

So I thought about it for a while, and decided on a MenuItems class, which
contained the position of the child in relation to it's siblings, where the
parent and the child were polymorphic. Then a given childable object can
find it's parentable by going through the menu_items table.

I want my nav to be able to do things like this:
--Category1
----SubCategory1
------Product1
------Product2
----Product3
--Category2
----Product4
--Page1
--Page2
--Page3


This is the current setup:

MODELS

class MenuItem < ActiveRecord::Base
  belongs_to :childable  , :polymorphic => true
  belongs_to :parentable , :polymorphic => true

  acts_as_list :scope => :parentable_id
end

class Category < ActiveRecord::Base
  has_one  :parent_menu_item , :as => :parentable , :class_name =>
'MenuItem'
  has_many :child_menu_items , :as => :childable  , :class_name =>
'MenuItem'

  has_one  :parentable   , :through => :parent_menu_item
  has_many :childables   , :through => :child_menu_items
end


class SubCategory < ActiveRecord::Base
  has_many :child_menu_items , :as => :childable  , :class_name =>
'MenuItem'
  has_one  :parent_menu_item , :as => :parentable , :class_name =>
'MenuItem'

  has_one  :parent   , :through => :parent_menu_item
  has_many :children , :through => :child_menu_items
end


class Page < ActiveRecord::Base
  has_one  :parent_menu_item , :as => :parentable , :class_name =>
'MenuItem'
  has_one  :parent   , :through => :parent_menu_item
end


SCHEMA:
ActiveRecord::Schema.define(:version => 20100525184637) do

  create_table "categories", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "menu_items", :force => true do |t|
    t.integer  "position",        :null => false
    t.integer  "parentable_id",   :null => false
    t.string   "parentable_type", :null => false
    t.integer  "childable_id",    :null => false
    t.string   "childable_class", :null => false
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
  end

  create_table "pages", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "sub_categories", :force => true do |t|
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

end



I have had a lot of trouble with it, this is the best I've gotten so far,
but I am still getting the error:
ActiveRecord::HasManyThroughAssociationPolymorphicError: Cannot have a
has_many :through association 'Category#childables' on the polymorphic
object 'Childable#childable'.


Is there a way to make this work? Is there a better way to do this?

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to