`
yearl
  • 浏览: 6668 次
  • 性别: Icon_minigender_1
  • 来自: 顺德
最近访客 更多访客>>
社区版块
存档分类
最新评论

咱也谈,谈rails的分模块开发

阅读更多
  为了使程序代码更加有组织,以便于维护、便于多人协作开发同时避免名字冲突,将不同功能的代码放到不同的模块中,是很好方法。
  在rails中,通过namespace来组织代码(其实是隐去了模块的概念)。
  这需要考虑几个方面的问题:
  1.table name;
  2.migration name;
  3.route;
  4.controller;
  5.view;
  6.model;
  7.test.
  ...
  下面以在admin名字空间下的post为例来说明如果使用namespace:

  一、关于表名:为了避免表名冲突,可以使用admin_posts这样的表名。这样做,要在model中要调用
set_table_name "admin_posts"

  有人说这样作违反了"Convention over configuration"的原则,我认为这个原则是为了方便人的使用的,感觉不方便时就不必遵守。当然,如果你是“Convention over configuration 偏执狂”的话,直接使用posts作为表名也是一样的,毕竟如何组织表名并不是rails的职责。只不过这时要考虑避免表名冲突。

  二、关于迁移文件名:同样可以依你的喜好考虑是不是使用create_admin_posts这样的文件名。我有个朋友更干脆,每个模块建一个迁移文件!代码组织很整齐。不过,需要更改时他就会哭了。

  三、关于route,这个没有什么有说的。
  map.namespace :admin do |admin|
    admin.resources :posts
  end


  四、controller中:由于model在namespace中,用到model的地方,如果不在同一个namespace中时,要使用其qualified name,即写成
Admin::Post

  的形式。另外还有一处要注意,与view有关。下面再说。

  五、view中:与namespace相对应,params[:post]改成了params[:admin_post],因此,controller中要用params[:admin_post]。

  六、model中:除了前面提到的set_table_name外,如果要关联其它namespace中的model时,要指定:class_name,还要用qualified name。同一个namespace中则不用(好象通过中间Model的多对多关联时也要用qualified name)。
  什么?又来了!我又听见有人在说”Convention over configuration”的事,说什么使用了:class_name就不Convention over configuration了。我觉得这里使用:class_name是很自然的事情。难道还有其它解决办法吗?

  七、关于test:惨了,写了这么多年程序,从来没写过测试代码。因为我不会写,所以我不知道该怎么处理。还请哪位达人来说一说。看来我也要学一学了。


  最后是关于scaffold生成使用namespace的代码问题。
  目前,用scaffold可以生成使用namespace的代码。但是,不能运行!
  以前就听人说过:如果你目前不使用scaffold还不能编写rails程序,那就暂时不要用namespace!
  不过scaffold确实还为我们做了大量工作,如果你喜欢用还是可以用的,只是要做些修改:

  1.Scaffold生成的表名是admin_posts形式的,所以在model中要加上set_table_name(或者你也可以将表名改成posts的形式);

  2. Scaffold生成的migration文件名是create_admin_posts形式的,当然你也可以改;

  3. Scaffold生成的controller#index中,实例变量名是@admin_post 与view中不一致,改成@post就好了,params[:post]要改成params[:admin_post],以与view中的一致。至于那些url 也要改了。

  4.view中的url也要改了。

  5.route中的
map.resources :posts
改成
  map.namespace :admin do |admin|
    admin.resources :posts
  end


  别问我测试代码要怎么改,我也不知道!

  好了,就这些,可以用了。
  Scaffold还是方便一点啊。

  Scaffold只是一个工具,能为我们做到这些已经不错了。当然我们希望Scaffold能更好!
分享到:
评论
5 楼 fl1429 2009-11-16  
建议 admin 部分 用 namespace 分层
4 楼 yangzhihuan 2009-11-13  
我也试过使用namespace,但是它没有带给我方便,反而令我抓狂。最后放弃,因为我用rails,就是为了方便的。
3 楼 星情泪 2009-11-12  
曾经试过这样写,但发现用scaffold生成之后的文件,几乎每个都要改
若不使用scaffold,手动写起来也比较麻烦

不知道rails在未来版本会不会对此支持好一些
2 楼 yearl 2009-11-11  
机器人 写道
引用
  五、view中:与namespace相对应,params[:post]改成了params[:admin_post],因此,controller中要用params[:admin_post]。

你确信没有搞错?

这要看你的form_for怎么写了。
如果这样写
<% form_for(@post) do |f| %>

那就没错了,就是params[:admin_post]。
如果你写成
<% form_for(:post, @post) do |f| %>

那就又不同了。就是params[:post]
1 楼 机器人 2009-11-10  
引用
  五、view中:与namespace相对应,params[:post]改成了params[:admin_post],因此,controller中要用params[:admin_post]。

你确信没有搞错?

相关推荐

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的示例。Rails 3.2.6是本文的基础框架,它是一个强大的Ruby Web应用程序框架,以其MVC(模型-视图-...

    Rails 敏捷开发实践

    本书由蔡望勤(Jesse Cai)撰写,他是一位资深的 Ruby 开发者,自2006年起便致力于 Ruby on Rails 的开发工作,同时也是中国 Rails 社区的创始人。书中不仅涵盖了 Ruby on Rails 的基础知识,还深入探讨了如何结合...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。在这个开发环境包中,我们拥有Ruby ...

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

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    ruby on rails最佳敏捷开发

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用框架,它遵循敏捷开发原则,致力于简化Web开发过程。Rails的核心理念是“Convention over Configuration”(约定优于配置),这意味着开发者可以减少大量...

    rails敏捷开发,我的成功之路

    综上所述,《Rails敏捷开发,我的成功之路》这本书不仅适合Rails初学者入门,也适合有一定经验的开发者深入学习和提高。通过阅读本书,你可以全面了解Rails框架的特点和优势,并学会如何运用敏捷开发的方法来构建高...

    Ruby On Rails开发实例-源代码

    "Ruby中文文档"可能包括了对Ruby语法、类、对象、模块、方法等基础知识的介绍,以及Rails框架的核心概念,如路由(Routing)、控制器(Controllers)、视图(Views)、模型(Models)、ActiveRecord、助手方法...

    ruby on rails(开发文档)

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用的开发过程。Rails的哲学是“约定优于配置”,鼓励开发者遵循一套标准的...

    Ruby on Rails实例开发

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,同时强调“约定优于配置”的原则。在本实例开发中,我们将探讨如何...

    rails开发技术必备书籍

    学习rails框架开发的必备书籍。。。。。。。。。。。。。

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    标题中的“Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码”表明这是一个关于使用Ruby on Rails框架进行敏捷Web开发的示例项目,名为Depot。Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它...

    ruby on rails社区网站开发源码

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它基于Ruby编程语言。...同时,这也是一个绝佳的机会去实践敏捷开发和TDD(测试驱动开发)原则,提升你的Web开发技能。

    Rails101_by_rails4.0

    Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它遵循模型-视图-控制器(MVC)的架构模式,设计用来快速开发数据库驱动的动态网页。随着Rails版本的更新迭代,此书聚焦于一个特定的版本,帮助...

    Rails项目源代码

    这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...

    中文版rails教程

    Rails以其“约定优于配置”(Convention over Configuration)和“Don't Repeat Yourself”(DRY,不要重复自己)的原则,极大地提高了开发效率和代码可读性,成为了Web2.0时代敏捷开发的首选工具。 在Ruby on ...

    基于ruby on rails开发示例源码

    Ruby on Rails,简称Rails,是一种基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。本示例源码提供了使用Ruby on Rails进行实际项目开发的具体...

    web开发之rails最新调试通过购物车代码

    8. **版本控制**:描述中提到的"web开发敏捷之道-rails第二版"可能指的是随着Rails框架版本的更新,代码也进行了相应的适应。Rails版本更新可能会引入新的特性或改变旧的行为,因此代码调整是必要的。 9. **安全和...

    Ruby+on+Rails快速Web应用开发实战.pdf

    - **Ruby的社区与资源**:Ruby拥有一个活跃的社区,Ruby on Rails的快速发展与这个社区的贡献是分不开的。 ### Rails的安装与配置 - **Rails的安装环境**:文档提到了在Windows和Linux操作系统上安装Rails的步骤,...

    Rails

    Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY(Don't Repeat Yourself)原则和开发效率。 Rails的核心特性包括: 1. **约定优于配置**(Convention Over Configuration):...

Global site tag (gtag.js) - Google Analytics