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]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> 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.

Reply via email to