新手问题 是不是应该慎用 namespace model

dreamable · 2013年02月01日 · 最后由 SharpX 回复于 2013年02月15日 · 4096 次阅读

我有一个 Fruit 的父类和 Apple 和 Orange 的子类。我最开始想象 Ruby-China 中 notification 那样都放到一个 Fruit 的 namespace 中。结果出现好多问题,解决了很多,最后的 form_for link_for 等还是不 work。只好放弃。其实我只是不想把太多的类放到 app/models 下,不存在名字冲突的矛盾。所以最后创建了 app/models/fruit 目录,然后把这些类都放到里面去,一样方便管理。 是不是最好不要使用 namespace model?namespace 一般什么时候使用?

能不用就不用吧,多一事不如少一事。

config.autoload_paths += %W( #{RAILS_ROOT}/app/models/fruit )

这样其他的 helper 就照常使用了。

这个是 module 吧 Ruby 没有 namespace 的概念啊 另外不是很明白你的描述 github 地址有嘛?

记得刚开始遇到不少坑,google 一下就好。

model 多了之后,采用 namespace 隔离是非常好的实践,正在使用,不咋麻烦

#3 楼 @iBachue 应该有 namespace 的概念吧,比如 Fruit::Apple 类,Apple 类不一定放在 Fruit 的 module 里面,我并没有 Fruit 这个 module。 还没有 git 地址。现在在学 Ruby,就是在自己机器上练着玩玩。

#5 楼 @SharpX 很多地方自动把 namespace 名字加上了。比如 form_for(@apple) 产生的链接就是 fruit_apple_path。但是 routes 里面是 apple__path,强制改了之后,update 又总是不成功。 namespace 的主要用处是什么?如果类名不冲突,@kungs 的方法和 namespace 是类似的吧。

#7 楼 @dreamable Rails 默认只加载 /app/models 文件下的所有 models,有两种方法加载其他文件夹的 models,一种就是 namespace,然后所有的 helper 方法都得加 namespace 前缀,另一种就是在配置文件里加,就像我上面说的,用这种方法,所有的 helper 和原来一样使用,不需做改变。

#8 楼 @kungs 嗯,用 namespace 的话很多地方默认配置不 work,还得手工改,太麻烦了。现在觉得用你的方法挺好的,够用了。谢谢。

代码越简单越好。

保持简单的设计是最佳实践 同样适用于 URL 结构

#2 楼 @kungs config.autoload_paths += %W( #{RAILS_ROOT}/app/models/fruit ) 这句在 Rails3.2.11 中最好不要加,否则会出现undefined method key? for nil:NilClass的错误

需要 登录 后方可回复, 如果你还没有账号请 注册新账号