You are welcome. An annoying side-effect is however that the Hobo migration generator attempts to create actual parent_id fields in the database each time. But not too terrible to delete those lines from the migration files.
PS: Also, I'm experiencing an issue where a HABTM table name (my application has just a single HABTM table) somewhere gets set to empty string (or probably nil actually), because the Hobo migration generator keeps wanting to rename my han-made HABTM table to ˇ:ˇ (empty symbol). 2015. június 29., hétfő 20:31:54 UTC+2 időpontban Ignacio Huerta a következőt írta: > > Thanks for sharing the workaround! I'm afraid I can't point you further > than the source code you mentioned. That's pretty complex code and it > will probably require a lot of effort to find a nice and clean solution. > > I vote for living with the workaround for now :). > > Warm regards, > Igancio > > El 25-06-2015 a las 22:45, HuBandiT escribió: > > I have run into this same issue today, but I worked around it on the > > ActiveRecord level instead. > > > > Acts_as_tree, when applied to a model, sets up a belongs_to :parent and > > a has_many :children association, supported by the existing database > > field parent_id. Hobo then applies its magic to make these accessible, > > directly accessible the parent_id field through ActiveRecord. > > > > With ancestry however, there is no parent_id field in the database, so > > when I set up the same belongs_to :parent association, and then went > > through Hobo's model and controller to update the parent, I received an > > "ActiveModel::MissingAttributeError: can't write unknown attribute > > `parent_id'" exception. > > > > Turns out Hobo's "belongs_to_with_accessible" > > (lib/hobo/model/accessible_associations.rb) overwrites (and thereby > > defeats) ancestry's parent= setter, that's why the model ends up > > attempting to write to its (nonexistent) "parent_id" database field. > > > > So I copied ancestry "parent=" setter code into my model, reestablishing > > the intended functionality: > > > > > > belongs_to :parent, class_name: "...", foreign_key: "parent_id", > > accessible: true > > > > has_ancestry > > > > # HACK - re-establish ancestry setter method to make things roll > > again against Hobo-accessible AR > > def parent= parent > > write_attribute(self.ancestry_base_class.ancestry_column, if > > parent.nil? then nil else parent.child_ancestry end) > > end > > > > > > With this the view layer happily returned to Hoboland where everything > > works magically as intended without explicit configuration. :) > > > > Enjoy! > > > > PS: Any interest in putting code into Hobo to avoid this conflict? I do > > not have the time to look into the internals of Hobo currently, but > > given specific instructions on where I should put what I could probably > > churn out a pull request. > > > > 2011. október 2., vasárnap 5:27:32 UTC+2 időpontban Banjoey a következőt > > írta: > > > > OK, so I got a little further. I used the <select> tag and am > > searching for menu entries, but am having trouble populating the > list. > > I have ancestry set up properly and migrated, and here's my > (relevant) > > model code: > > > > fields do > > name :string, :unique, :name => true > > ancestry :string, :index => true > > timestamps > > end > > > > belongs_to :post > > has_ancestry > > > > Then, I created a merged form in application.dryml which looks like > > this: > > > > <extend tag="form" for="MenuEntry"> > > <old-form merge multipart> > > <field-list: fields="name, post, parent_id"> > > <parent-id-view:> > > <% @menu_entries = MenuEntry.all %> > > <if test="&@menu_entries"> > > <select options="&@menu_entries"/> > > </if> > > <else> > > <select disabled><option>No Parents Available</option></ > > select> > > </else> > > </parent-id-view:> > > </field-list:> > > </old-form> > > </extend> > > > > Now, when I create the first menu entry, I get the "No Parents > > Available" entry (disabled), and I can create other entries as well. > > However, after I create the first, I would expect to have a list of > > all menu entries in the drop down. If I put a <% puts... %> > statement > > I get all the menu_entries that are saved to the db. However, those > > menu entries do not show up in the drop down. > > > > I'm grasping at straws here, but do I need to iterate and get the > > names of the entries (I have a field set for name in the model as > you > > can see above)? Is something not "translating" correctly since I am > > not using the <select-one> tag (which won't work since this isn't a > > belongs_to relationship)? > > > > Any help would be appreciated very much. I feel like I'm almost > > there!!! :) > > > > > > > > On Sep 30, 1:27 am, Banjoey <[email protected]> wrote: > > > OK, I have installed the Ancestry gem, migrated the db fields, and > am > > > working on my very first recipe to contribute to the cookbook. > > > However, I've hit a roadblock and need some help... > > > > > > I have a model that I'm going to use for a menu system, and the > model > > > is called MenuEntry. It just has a name :string and the > > > ancestry :string fields, plus an associated belongs_to :post > > > relationship. I think I'd like to set it up to where you simply > > pick a > > > parent menu entry in the new/edit forms. If I understand the > ancestry > > > gem correctly I'll just need to provide the user with a drop down > > list > > > of all the available menu_entries and then pass the selected one > to > > > the new method of the controller when creating this one. > > > > > > 1) How do I create a drop down of all the menu entries? It looks > > to me > > > like <select-one> would be the best way to go, but is it only > usable > > > on models that are set up to have a belongs_to relationship, or > can I > > > override that with something like <select-one > > > entries="#{MenuEntry.all}">... or something like that? > > > > > > 2) Once I get that, can I pass the selected menu_entry to the new > > > controller method and do what I need with it? I think the code I'd > > > need in a non-hobo app would be something like this: @menu_entry = > > > MenuEntry.new(:parent_id => params[:parent_id]) but I was > > wondering if > > > I could pass those parameters into hobo_new like this: > > > hobo_new :parent_id => params[:parent_id] > > > > > > I think the :parent_id is set up when you declare the model with > > > has_ancestry, so I assume that means it is "hidden" to hobo, and > all > > > the information is stored in that string field anyway. Any ideas > on > > > where I can look? > > > > > > Thanks, > > > Joey > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Hobo Users" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to [email protected] <javascript:> > > <mailto:[email protected] <javascript:>>. > > To post to this group, send email to [email protected] > <javascript:> > > <mailto:[email protected] <javascript:>>. > > Visit this group at http://groups.google.com/group/hobousers. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Hobo Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/hobousers. For more options, visit https://groups.google.com/d/optout.
