After I wrote the acts_as_tree recipe, I wrote another tag definition that
iterates over an acts_as_tree model and displays the cards of an associated
has_many model. This will not work precisely the way you want for your use
case, but might spur some ideas.
Example:
class Question < ActiveRecord::Base hobo_model fields do name :string
parent_id :integer end
has_many :answers belongs_to :answer acts_as_treeend
class Answer < ActiveRecord::Base hobo_model fields do name :
string end belongs_to :question has_one :another_question_to_ask,
:class_name => 'question' end
In application.dryml:
<extend tag="index-page" for="Question"> <old-index-page merge>
<after-new-link:><p><br/>Click a question to view
answers.</p></after-new-link:> <!-- Remove pager control -->
<top-page-nav: replace /> <collection: replace>
<hierarchical-collection with="&Question.all" to="answers">
<append-close-button:> <a:answers action="new"
if="&can_create?(this.answers)"> <ht
key="answers.actions.new"> New
Answer </ht>
</a:answers> </append-close-button:>
</hierarchical-collection> </collection:> <!-- Remove pager
control --> <bottom-page-nav:
replace /> </old-index-page></extend>
<def tag="hierarchical-collection" attrs="to"> <% def
tree_h(acts_as_tree_set, init=true, &block) @@level = 1 if
init if acts_as_tree_set.size > 0
acts_as_tree_set.collect do |item| %> <do with="&item">
<% next if item.parent_id && init
@@level += 1 yield item
tree_h(item.children, false, &block) if item.children.size >
0 @@level -= 1 %> </do>
<% end else %>(none)<%
end end tree_h(this, true) { |item| item_for
= to.nil? ? item : item.send(to) %> <%= "<h#{@@level}>"
%> <a href="#"
onclick="Effect.BlindDown('hierarchy-collection-#{item.typed_id.gsub(':','-')}');
return false;" param="hierarchy-link"> <%= item.name +
(" (#{item_for.count})" if item_for.respond_to?('count')) %>
</a> <%= "</h#{@@level}" %><% if
item_for.respond_to?('count') %> <div
id="hierarchy-collection-#{item.typed_id.gsub(':','-')}" style="display: none"
param="hierarchy-section"> <div class="close-button"
param="close-button"> <a href="#"
onclick="$('hierarchy-collection-#{item.typed_id.gsub(':','-')}').hide();
return false;">close</a> </div>
<collection
with="&item_for" param="items" /> </div><%
end } %></def>
--- On Sat, 7/31/10, Simeon Theobald <[email protected]> wrote:
From: Simeon Theobald <[email protected]>
Subject: Re: [Hobo Users] Multiple models in one tree?
To: [email protected]
Date: Saturday, July 31, 2010, 12:19 AM
Okay - a rough outline:
A question has many potential answers. Each answer can lead to a number of
questions. An example would be:
+Would you like Coffee or Tea? [Question]
- Coffee [Answer]
+De-Caff or Regular? [Question]
-De-Caff [Answer]
-Regular [Answer]
+Moccona or Nescafe [Question]
-Tea [Answer]
I can't see that recursive nesting of two trees should be a problem given that
we
can pass in the "parentid" (which incidentally I need to figure out how
to specify differently), the problem at the moment is that I can't see a way
to pass the current "id" to the alternate model's tree as a "parentid".
I'd eventually like to include links to
add "children", or edit/remove the current node. That functionality further
complicates things in that it will involve manipulating records in the
intermediary tables as well as the leaf level. Nesting sure messes with your
frame of reference!
First things first though, I need to get a tree out somehow..
On Sat, Jul 31, 2010 at 12:43 PM, Chuck Benedict <[email protected]>
wrote:
Give me a use case and I'll be glad to add my $0.02
Sent from my iPhone
On Jul 30, 2010, at 5:02 AM, Simeon <[email protected]> wrote:
The learning curve gets steep in a hurry around these parts!
The "Hierarchies - Using acts_as_tree" recipe deals nicely with a self
referencing model (category belongs to category) but it takes on the
context of the model containing the call. I have yet to find reference
to a similar solution involving multiple (nested) models.
Is it possible, and how would I go about starting to figure it out?
Thanks for your thoughts!
--
You received this message because you are subscribed to the Google Groups "Hobo
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/hobousers?hl=en.
--
You received this message because you are subscribed to the Google Groups "Hobo
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/hobousers?hl=en.