`
edwardpro
  • 浏览: 312262 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

rails中递归的烦闷

阅读更多
因为要实现树展现,当然用非递归也可以的,不过考虑灵活性和维护简便还是用递归实现,以下的例子是在helper中使用的,不过rails的输出始终让我有点找不到北,毕竟在webwork中如果实在要输出依然可以通过response得到输入流的,但rails似乎没有,于是只能用如下如此愚蠢的方法实现了:

  protected
  @@body=""
  def build_tree(father_id=0,level=1)
   
    @trees=Site.find(:all,:conditions => "father_id=#{father_id}")
    @trees.each do |tree|
      @t=""
       (level-1).times do
        @t+="++"    
      end
      @@body +="#{@t}#{tree.tree_name}(#{tree.id})<br/>"
      build_tree(tree.id,level+1)
    end
    return @@body
  end

最后结果灭有问题,但这样用返回类变量方法总不是太好,还米有想出特别好的解决方案只能先如此了。接下来要实现js的权限菜单也会采用此法。
分享到:
评论
2 楼 edwardpro 2007-05-26  
谢谢
1 楼 liusong1111 2007-05-25  
@trees和@t没必要 是成员变量吧,局部变量就可以。
递归时充份利用返回值:

def build_tree(father_id=0,level=1)
  ...
  buffer = "#{@t}#{tree.tree_name}(#{tree.id})"
  buffer += build_tree(tree.id,level+1)
  return buffer
end

或者传入一个buffer作为输出的对象,build_tree返回值无意义:
def build_tree(buffer,father_id=0,level=1)
  ...
  buffer << "#{@t}#{tree.tree_name}(#{tree.id})"
  build_tree(buffer,tree.id,level+1)
end

buffer = ""
build_tree(buffer)
利用buffer值。

相关推荐

    Ruby on Rails中文指南

    7. **哈希与符号化键(Hashes and Symbolized Keys)**:在Rails中,使用符号作为哈希键可以提高性能,因为符号是不可变的,且在内存中只存储一次。 8. **部分视图(Partials)**:部分视图是可重用的视图代码块,...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    Ruby On Rails中文教材(PDF)

    4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL。 5. **Scaffolding**:Rails的快速开发工具,能自动生成CRUD(创建、读取、更新、删除)操作的模型、...

    Rails 中mongrel的安装

    在Rails项目中安装Mongrel通常通过RubyGems进行,这是一个Ruby的包管理器。首先确保RubyGems已经安装,然后在命令行执行以下命令: ```bash gem install mongrel ``` 安装完成后,可以通过`mongrel_rails`命令来...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    Rails项目源代码

    在Rails中,可以使用Devise这样的gem来处理用户身份验证,提供注册、登录、密码重置等功能。用户模型通常会包含确认令牌、加密密码等相关字段。 4. **数据库和ActiveRecord**: Rails使用ActiveRecord作为ORM,它...

    rails-assets, 在 Rails 中,资产管理的解决.zip

    rails-assets, 在 Rails 中,资产管理的解决 Rails 资产 Bundler 到 Bower 代理本自述文件涉及项目的开发方面。 访问站点了解如何在你的应用程序中使用 Rails 资产。 插件开发设置git clone git@github.com:tenex/r

    敏捷Rails中文教程

    - **ActiveRecord**:Rails中的ORM(对象关系映射)组件,它简化了数据库操作,使开发者可以更专注于业务逻辑而非底层的数据访问细节。 - **模板引擎**:Rails支持多种模板引擎,如ERB、HAML等,开发者可以根据项目...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    关于rails 3.1 cucumber-rails 1.2.0

    总的来说,了解和熟练掌握Rails 3.1和Cucumber-Rails 1.2.0的用法,对于任何希望在Ruby on Rails环境中进行高效、高质量开发的团队来说都是至关重要的。通过阅读相关的博客文章(如给出的链接),开发者可以深入学习...

    RailsGuides中那个blog程序源码

    在Rails中,**模型(Model)** 负责处理数据和业务逻辑,通常与数据库交互。在这个"blog"程序中,可能会有一个`Post`模型来代表博客文章,包含了如标题、内容、作者等属性,并提供相关的操作,如创建、更新、删除...

    rails2-sample

    这一章节将讨论Rails中的安全特性,如防止SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。通过实施这些防护措施,可以大大降低应用遭受攻击的风险。 #### 9. Advanced Topics(高级主题) 这一部分将覆盖...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    这篇博客文章“Rails中应用Ext.tree:以中国的省市地区三级联动选择为例”提供了一个实用的示例,教我们如何利用Ext.js库中的Tree组件来实现这种功能。 首先,让我们了解Rails和Ext.js的基本概念。Rails是基于Ruby...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Rails

    2. **Active Record**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL语句。 3. **Action Controller**:负责处理HTTP请求并调用模型来执行业务逻辑,然后将结果传递给视图...

    rails敏捷开发的购物车系统

    在Rails中,可以使用ActiveRecord来操作数据库。创建购物车模型(Cart)和商品模型(Product),定义它们之间的关系,如多对多关系,通过一个关联表记录每个购物车包含的商品及其数量。使用`has_and_belongs_to_many...

Global site tag (gtag.js) - Google Analytics