最近在做的一个ROR的web项目中遇到如下问题:
产品可以按类分类导航浏览,主要可以分为A,B,C三类,三类之下还有其他分类,同时,基类和其下的分类都可以由用户扩展。从横向上,主类可以由用户扩展,纵向上,用户也可以扩展。
类别信息存储与categories表中:
id:integer 主键
name:string 类别名称
parentid:integer 类别的父类
要求:
生成导航菜单,并且可以含有子类的菜单可以通过点击展开或关闭,并且可以按类别导航产品。
实现:
通过深度优先遍历来生成菜单,在便利过程中构建菜单的html编码,主要是使用了一个@htmlmenu的string来拼接生成的html代码,最终显示在页面中。
代码:
def index
@htmlmenu=""
@htmlmenu+= "<ul>"
@root = Category.find(:all,:conditions=>['parentid=0'])
@root.each { |item|
if Category.find_by_parentid(item.id)
@htmlmenu+= "<li><a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">"
else
@htmlmenu+= "<li><a href='/categories/#{item.id}'>"
end
@htmlmenu+= item.name
@htmlmenu+= "</a>"
buildmenu item
@htmlmenu+= "</li>"
}
@htmlmenu+= "</ul>"
end
private
def buildmenu category
@children = Category.find_all_by_parentid(category.id)
if @children.size!=0
@htmlmenu+= "<ul id='ChildMenu#{category.id}' class='collapsed'>"
@children.each { |item|
if Category.find_all_by_parentid(item.id).size!=0
@htmlmenu+= "<li><a href='#ChildMenu#{item.id}' onclick=\"DoMenu('ChildMenu#{item.id}')\">"
else
@htmlmenu+= "<li><a href='/categories/#{item.id}'>"
end
@htmlmenu+= item.name
@htmlmenu+= "</a>"
buildmenu item
@htmlmenu+= "</li>"
}
@htmlmenu+= "</ul>"
end
end
遍历方法为private的buildmenu方法。
说明:parentid=0是为了找到所有的基类,他们的parentid默认为0;
在代码中需要加入css和js:
<script type="text/javascript">
function DoMenu(emid){
var obj = document.getElementById(emid);
obj.className = (obj.className.toLowerCase() == "expanded"?"collapsed":"expanded");
}
-->
</script>
<style>
ul.collapsed {
display: none;
}
</style>
补充:
1.这是一个雏形,关于性能问题有以下几点:
1.1 代码可以优化,有些比较判断没有必要,懒得去掉了:)
1.2 如果类别数据增多,如果担心过多的数据库访问,可以把这些写到程序初始化里去,不过缺点是新增的类别需要重启服务器后可以生效
2.我觉得这个拿去做文件系统遍历很好,而且可以直接生成html页面~
3.希望有朋友可以提出自己的建议或是意见,大家交流
分享到:
相关推荐
5. Generators:自动生成代码模板,加速开发速度。 6. Gem生态系统:Ruby社区拥有丰富的Gem(库),覆盖了各种功能,方便扩展和集成。 **四、ROR的实例应用** 许多知名网站如GitHub、Airbnb、Shopify等都基于Ruby ...
RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...
**Ruby on Rails(简称RoR)中文资料** Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”...
NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696
使用ProgramR 和AIML 基于RoR的自动问答机器人。
在CIFAR-10上达到89%的准确率,以及在CIFAR-100上达到72%的准确率,展示了ResNet和Ror模型在处理复杂图像分类任务上的强大能力。相比于其他传统的浅层网络或早期的深度网络,这样的准确率显著提高了模型的性能,表明...
Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...
在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...
Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...
基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。
另一个文件“jascaffold”可能是一个RoR的生成器或插件,用于自动生成常见的CRUD(Create, Read, Update, Delete)操作的模型、控制器和视图代码,以此加速开发过程。Jascaffold可能参考了Java开发中的Scaffold概念...
3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成基本的CRUD(创建、读取、更新、删除)操作的视图、控制器和模型代码,加速开发进程。 4. **Convention over Configuration**:RoR强调约定优于配置,减少...
ActiveScaffold通常用于后台管理界面,因为它能够自动生成大部分数据交互所需的代码,从而节省了大量的开发时间。 结合上下文,"ror文本编辑插件"可能已经集成了ActiveScaffold,提供了在ActiveScaffold生成的表单...
3. IDE将自动生成符合RoR约定的项目结构,包括Controllers、Models和Views目录。 **配置数据库环境** 打开`database.yml`文件,配置数据库连接,特别是添加MySQL的用户名和密码(如果需要的话)。 **创建模型** 1....
### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...
### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...
在命令行中输入`rails new project_name`,其中"project_name"是你项目的名称,这将生成一个完整的ROR项目结构。 为了实现更好的开发体验,我们需要集成IDE或代码编辑器。这里我们关注的是Eclipse。Eclipse是一款...
《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...