Hello Jeremy
Thank you for your advice.
I'll check your code.
--
Hiroyuki Sato
2014年6月28日土曜日 0時06分22秒 UTC+9 Jeremy Evans:
>
> On Thursday, June 26, 2014 10:46:50 PM UTC-7, Hiroyuki Sato wrote:
>>
>> I wrote find_from_top method.
>> I want to simplify this. but It seems work fine.
>>
>> def traverse_to_leaf(tree,node)
>> ret = nil
>> return node if tree.empty?
>> cur_name = tree.shift
>>
>> leaf = node.children_dataset.first(:name => cur_name)
>> if( leaf )
>> ret = traverse_to_leaf(tree,leaf)
>> end
>> ret
>> end
>>
>> def find_from_top(search_path)
>>
>> root = FileTree.root
>> nodes = search_path.split('/')[1..-1]
>> traverse_to_leaf(nodes,root)
>>
>> end
>>
>
> I would recommend an iterative approach:
>
> def find_from_top(search_path)
> current = FileTree.root
> search_path[1..-1].split('/').each do |name|
> break unless current = current.children_dataset.first(:name=>name)
> end
> current
> end
>
> I didn't actually test that, but hopefully it or something similar works.
>
>
>
>
>> An approach using joins:
>>>
>>> Node.join(:nodes___n1, :parent_id=>:id).
>>> join(:nodes___n2, :parent_id=>:id).
>>> first(:nodes__name=>'a', :n1__name=>'b', :n2__name=>'c')
>>>
>>
>> joins approach seems good.
>> But I'm not sure how to add multiple path dynamically.
>> I'll check it.
>>
>
> It actually looks very similar to the code above:
>
> def find_from_top_join(search_path)
> ds = FileTree.roots_dataset
> search_path[1..-1].split('/').each_with_index do |name, i|
> ds = ds.join(:file_trees.as("n#{i}"), :parent_id=>:id, :name=>name)
> end
> ds.first
> end
>
> Again, not tested, but hopefully it or something similar works.
>
> Thanks,
> Jeremy
>
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" 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/sequel-talk.
For more options, visit https://groups.google.com/d/optout.