浏览 5476 次
锁定老帖子 主题:ROR的数据表名可以不带s
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-07
哎,是我嘴太快手太慢了。已经知道怎么弄了。
set_table_name就可以了。 请管理员放到新手区或隐藏了吧,哎,惭愧:oops: 原文 引用 因为刚学,所以有些疑惑就想赶紧说出来。
如题,如果我的数据表名不带s,是不是就不能使用ror来开发了?或者说使用它开发也可以,但必须把所有数据库相关的操作(crud/list)都手工实现一遍(ROR的高效率也就打了折扣)呢? 那么,如何来理解rails的开发者,为什么要强制要求表名带s呢?比如users这个表,它在分页显示中,会传给view页面一个@users列表,在crud的时候,则会创建一个@user对象,但是这和数据表的名字也没有什么关系吧? 不解。 而且如果所有的表名全都带s,也不是特别合适,有些英文的复数是以es结尾的,class->classes,有些复数就是本身如people->people,这也不太合语法啊。 再一个就是对数据库层的侵入有点强,一个框架不应该干涉到数据库表的设计吧。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-07
together 写道 如果我的数据表名不带s,是不是就不能使用ror来开发了?或者说使用它开发也可以,但必须把所有数据库相关的操作(crud/list)都手工实现一遍(ROR的高效率也就打了折扣)呢?
在environment.rb里加上: ActiveRecord::Base.pluralize_table_name = false together 写道 那么,如何来理解rails的开发者,为什么要强制要求表名带s呢?比如users这个表,它在分页显示中,会传给view页面一个@users列表,在crud的时候,则会创建一个@user对象,但是这和数据表的名字也没有什么关系吧? 这么来理解:它就是个约定,也可以约定不使用复数形式(按上面的设置),也可以约定为复数形式,有了约定就可以不用在每个地方去指定,当然你也可以指定表名,但它作为一个约定就是为了省事的。 together 写道 而且如果所有的表名全都带s,也不是特别合适,有些英文的复数是以es结尾的,class->classes,reply->replies,这也不太合语法啊。 它并不是简单地加个s,它知道class的复数是classes,reply的复数是replies。。。当然不保证所有复数它都知道。 together 写道 再一个就是对数据库层的侵入有点强,一个框架不应该干涉到数据库表的设计吧。 如前面所说,它没有干涉,它就是个约定,你可以不按它的约定来做,换来的就是一堆麻烦事。 |
|
返回顶楼 | |
发表时间:2006-11-07
一句话就是约定胜于配置。
懒人最爱,灵活的配置并是任何时候都需要,为了1%的需要就要牺牲99%的常规情况,太浪费。 |
|
返回顶楼 | |
发表时间:2006-11-08
是配置大于约定吧。
多谢茄子老兄的回复! 不过按你说的在enviroment.rb里最后一行加上ActiveRecord::Base.pluralize_table_name = false 无法启动script/server,在运行:ruby script/generate scaffold xxx时也是报错的: /usr/local/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1129:in `method_missing': undefined method `pluralize_table_name=' for ActiveRecord::Base:Class (NoMethodError) 问出这个问题来,真的是业余。不过可能相当一部分人初接触ROR都会有这样的疑问吧。 |
|
返回顶楼 | |
发表时间:2006-11-08
查了一下api,应该这样指定:
ActiveRecord::Base.pluralize_table_names = false 问题解决了,谢谢茄子 |
|
返回顶楼 | |
发表时间:2006-11-10
我想知到怎么 不默认用id
实际开发 不能所有的表ID 都命名为“ID” |
|
返回顶楼 | |
发表时间:2006-11-10
qiezi 写道 它并不是简单地加个s,它知道class的复数是classes,reply的复数是replies。。。当然不保证所有复数它都知道。 ror这么强啊,偶很好奇这个功能是怎么实现的,难道它内建了一个词汇表来做复数映射,还是简单地根据s或者y结尾来做一个判断? |
|
返回顶楼 | |
发表时间:2006-11-10
Readonly 写道 qiezi 写道 它并不是简单地加个s,它知道class的复数是classes,reply的复数是replies。。。当然不保证所有复数它都知道。 ror这么强啊,偶很好奇这个功能是怎么实现的,难道它内建了一个词汇表来做复数映射,还是简单地根据s或者y结尾来做一个判断? 它依据下面这个规则来处理单数化和复数化,可能不完整,但大部分情况下差不多了。 Inflector.inflections do |inflect| inflect.plural(/$/, 's') inflect.plural(/s$/i, 's') inflect.plural(/(ax|test)is$/i, '\1es') inflect.plural(/(octop|vir)us$/i, '\1i') inflect.plural(/(alias|status)$/i, '\1es') inflect.plural(/(bu)s$/i, '\1ses') inflect.plural(/(buffal|tomat)o$/i, '\1oes') inflect.plural(/([ti])um$/i, '\1a') inflect.plural(/sis$/i, 'ses') inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves') inflect.plural(/(hive)$/i, '\1s') inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies') inflect.plural(/(x|ch|ss|sh)$/i, '\1es') inflect.plural(/(matr|vert|ind)ix|ex$/i, '\1ices') inflect.plural(/([m|l])ouse$/i, '\1ice') inflect.plural(/^(ox)$/i, '\1en') inflect.plural(/(quiz)$/i, '\1zes') inflect.singular(/s$/i, '') inflect.singular(/(n)ews$/i, '\1ews') inflect.singular(/([ti])a$/i, '\1um') inflect.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis') inflect.singular(/(^analy)ses$/i, '\1sis') inflect.singular(/([^f])ves$/i, '\1fe') inflect.singular(/(hive)s$/i, '\1') inflect.singular(/(tive)s$/i, '\1') inflect.singular(/([lr])ves$/i, '\1f') inflect.singular(/([^aeiouy]|qu)ies$/i, '\1y') inflect.singular(/(s)eries$/i, '\1eries') inflect.singular(/(m)ovies$/i, '\1ovie') inflect.singular(/(x|ch|ss|sh)es$/i, '\1') inflect.singular(/([m|l])ice$/i, '\1ouse') inflect.singular(/(bus)es$/i, '\1') inflect.singular(/(o)es$/i, '\1') inflect.singular(/(shoe)s$/i, '\1') inflect.singular(/(cris|ax|test)es$/i, '\1is') inflect.singular(/(octop|vir)i$/i, '\1us') inflect.singular(/(alias|status)es$/i, '\1') inflect.singular(/^(ox)en/i, '\1') inflect.singular(/(vert|ind)ices$/i, '\1ex') inflect.singular(/(matr)ices$/i, '\1ix') inflect.singular(/(quiz)zes$/i, '\1') inflect.irregular('person', 'people') inflect.irregular('man', 'men') inflect.irregular('child', 'children') inflect.irregular('sex', 'sexes') inflect.irregular('move', 'moves') inflect.uncountable(%w(equipment information rice money species series fish sheep)) end |
|
返回顶楼 | |