锁定老帖子 主题:美就是生产力(Rails美学宣言阐释)
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-04-25
多给些建议. 暂时项目中还用不到,对ruby有兴趣,看哪本书啊?
|
|
返回顶楼 | |
发表时间:2006-04-25
出去买了包烟,继续来
class Person < ActiveRecord::Base belongs_to :account end class Account < ActiveRecord::Base has_many :people end 假设Person有一个first_name和last_name属性,好 Account.find(:first).people.find_or_create_by_first_name_and_last_name("Richard", "Feynman") 你是否想起一些事情,无数次,你取一个和上面一样的名字,用XXXQL写好DAO,写Service,但是这些事情是人干的吗? 当然不是,我们有meta-programming,有Dynamic Code Generation 且慢,find_by_XXX_and_XXX_and_XXX当然简单,如果不是这样,我希望直接用名字去去呢? OK,你可以任意定义 class Account < ActiveRecord::Base has_many :people do def find_or_create_by_full_name(name) first_name, *last_name = name.split last_name = last_name.join " " find_or_create_by_first_name_and_last_name(first_name, last_name) end end end person = Account.find(:first).people.find_or_create_by_full_name("Richard Feynman") 你还有写DAO的欲望吗,你不想一路....到头吗(当然不可以) |
|
返回顶楼 | |
发表时间:2006-04-25
这本书的作者叙事方式很奇怪,似乎比较waterfull,不过用作入门还是不错的
|
|
返回顶楼 | |
发表时间:2006-04-26
potian 写道 这本书的作者叙事方式很奇怪,似乎比较waterfull,不过用作入门还是不错的
整个一个代码生成器 。 错了不是代码生成器。比代码生成器先进多了。 应该是动态组装Class。 比如动态加入method。。。。。。 有了这个理念,很多通用的工作就可以做出来了。 ![]() |
|
返回顶楼 | |
发表时间:2006-04-26
当然,你可以不定义在关系上
class Post < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base def self.search(query) find(:all, :conditions => ["body = ?", query]) end end Comment Load (0.000582) SELECT * FROM comments WHERE (comments.post_id = 1) AND (body = 'hi') Post.find(1).comments.search "hi" 你还可以有很多方法,包括extend,但是抛开这些,我们来看一个更妙的 class Comment < ActiveRecord::Base belongs_to :post end class Post < ActiveRecord::Base has_one :last_comment, :class_name => "Comment", : order => "created_at desc" has_many :comments end Post.find(1).comments.create(: body => 'You will see') Post.find(1).last_comment 自然, Post有很多comments,但是它只有一个最后的注释? Rails是什么,Rails就是在Web环境下提供创建DSL的框架,如果用户想知道你在干什么 show your code! |
|
返回顶楼 | |
发表时间:2006-04-26
你想当作什么?
如果你可以有(has) 什么,或者你属于(belongs to)什么,当然你也可以当什么 回到我们Xper们热爱的东东 class Iteration < ActiveRecord::Base has_many :stories, : order => "position" end class Story < ActiveRecord::Base belongs_to :iteration acts_as_list :scope => :iteration end 这里稍微变化的是Story在Iteration中是有顺序的,所以Story把自己当作列表 iteration1 = Iteration.create(:name => "iteration 1") story1 = Story.create(:name => "story 1") story2 = Story.create(:name => "story 2") story3 = Story.create(:name => "story 3") iteration1.stories << story1 iteration1.stories<< story2 iteration1.stories<< story3 还要解释吗,还需要什么add_story之类的东东吗,byebye def show_iteration_stories(iteration) iteration.stories.map {|story| story.name}.join "," end 这个就是显示所有的story名字 show_iteration_stories(iteration1) ["story 1,story 2,story 3"] 客户告诉我们story3应该往上一点,优先级比较高,我们: stroy3.move_higher 然后给客户看 show_iteration_stories(iteration) "story 1,story 3,story 2" 客户高兴了,又一天,客户发现story1应该放到最后 story1.move_to_bottom 然后给客户看 show_iteration_stories(iteration) "story 3,story 2,story 1" 我们的客户真的非常满意,哈哈 rails还有一个acts_as_tree,可以用作自包含的树,例如组织机构、地区等等,在某些情况下,树的子应该是需要排序的,免得每次取出来的顺序堵不一样,所以可以结合两者写一个Acts_As,大概7-8行声明性的代码,Rails是一件关于少写代码,写更可以理解的代码的事情,不是吗 另外有一个acts_as_nested和acts_as_thread,可以在11分钟内写一个简单的论坛 |
|
返回顶楼 | |
发表时间:2006-04-26
休息休息,下次再来
|
|
返回顶楼 | |
发表时间:2006-04-26
firebody 写道 potian 写道 class Account < ActiveRecord::Base validates_presence_of :subdomain,:name, :email_address, :password validates_uniqueness_of :subdomain validates_acceptance_of :term_of_service, :on=>:create validates_confirmation_of :password, :email_address, :on=>:create end 我不知道没用过rails的人会怎么理解,OK 我来读一遍,Account是一个ActiveRecord,但是你要小心了: 1。 subdomain,name,email_address,password必须存在(有值) 2。subdomain要唯一的哦 3。你必须接受term of service,当然不是每次你都要这么麻烦,只是在建账户的时候 4。两次密码必须一样,为了防止你的email地址不对,也确认一下吧 我相信读了这一遍以后,你马上就明白了(可能我没读你就明白了) 一个经常在程序里面碰到的问题是验证,而模型层的验证是必须有的,你碰到过比这更简洁、完美的验证机制吗,我只知道是麻球一样的XML,看起来无比强大的表达式和验证框架。。。 这样的强验证/约束模型确实是渴望的。 一个问题: 这样的验证要跟数据库作频繁的SQL嘛? 比如保证唯一。 你看见那个: on参数了么? 如果不声明的话默认是: on=> :save 也就是保存到数据库时才检查一下. 还有更强的是: on => :update, 既内存中的AR对象更改时就检查. |
|
返回顶楼 | |
发表时间:2006-04-26
potian 写道 休息休息,下次再来
辛苦啦 ![]() |
|
返回顶楼 | |
发表时间:2006-04-26
我觉得至少要先看看 Programming Ruby 的第一章,如果可以再看看第二章,然后就可以看 Agile Book 了。
如果真用 Rails 开发网站, 可能中间碰到的问题还会很多的。 |
|
返回顶楼 | |