论坛首页 Ruby版 rails

对于model是全部放在model下面,还是应该分开包来管理的疑问

浏览 3618 次
精华帖 (0) :: 良好帖 (13) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-03-07
其实说严重点,这可以算ruby的一个语法陷阱,一般人很难会把所有使用类的地方都写上全路径,因此“写ruby第一要注意的就是:想尽一切办法避免重名”仍然是需要时刻提醒自己的。
   
0 请登录后投票
最后更新时间:2008-03-07
希望rails能把controller分成两类:

1,主表维护
2,业务操作
   
0 请登录后投票
最后更新时间:2008-03-10
我测试了一下,还有一个model不放在根下,要求跟control,helper的分层一致的理由
我用rspec,如果不一致,generate出来的代码还需要手工改,很麻烦,一致就没问题,例如都在users层(module)下,ruby script/generate rspec_controller users\user
   
0 请登录后投票
最后更新时间:2008-03-16
2.0已经有了命名空间,例如:
ruby script/generate model Admin::User


这样将会生成
      create  app/models/admin
      create  test/unit/admin
      create  test/fixtures/admin
      create  app/models/admin/user.rb
      create  test/unit/admin/user_test.rb
      create  test/fixtures/admin_users.yml
      exists  db/migrate
      create  db/migrate/002_create_admin_users.rb


controller也可以。
   
0 请登录后投票
最后更新时间:2008-03-18
不过migrate无法支持按模块创建目录,所有的migratee都会放在一个db/migrate目录下。
习惯了java的package管理,感觉ruby or rails在这方面比较别扭。
   
0 请登录后投票
最后更新时间:2008-04-24
pig345 写道
如果问题是:
liusong1111 写道

class A
end

module C
  module A
    class B
      # use class A
    end
  end
end



那么,考虑下:

ruby存在的时间比java更久,这么基础的问题(严重点说——缺陷)难道只有咱们碰到过?

或者是ruby社区长久以来对此一直视而不见???这、这ruby还能用么。。。




先放两句大话,呵呵,其实也是最近才找到解决方法,分享下:

class A
  def self.who?
    puts self
  end
end

module C
  module A
    class B
      def self.ask_A
        A.who? 
        ::A.who?
      end
    end
    def self.who?
      puts self
    end
  end
end

C::A::B.ask_A


irb里面实验下看看?


我前面的想法跟你所说没有冲突,我当时的思路还不清晰。
不是ruby的问题,而是直接依赖rails的自动加载机制不行,从理论上说,也无法解决。
假设你上面代码,class A定义在a.rb中,module C定义在c.rb中。c.rb没有显式require 'a.rb',我们假定事先加载了rails(或具体的active_support)。
module C中那行A.who? ,因为查找时先找到了module A,所以就用了它。而我本期望它会自动加载a.rb,使用class A的。由于提前找到const(module A)而短路了自动加载机制的const_missing,所以依赖这种加载的自动化不行。
解决方式有两种,一是手工require 'a.rb',并像你上面::A这样用。二是用model :a的声明。第二种方式我没有查看它的源码,大致推想它直接找到models目录的文件加载,跟第一种方法本质一样。

结论是:不是加载不到,而是不能自动加载到。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐