projects = Project.find(:all)使用rails提供的shortcut:
projects.collect { |p| p.name }
projects.collect(&:name)
刚开始可能会觉得有点weird,不过习惯了就感觉很方便,还可以使用链式操作:projects.collect(&:name).collect(&:downcase)而且不止collect方法可以这样用,所有需要跟block的方法都可以用:
projects.all?(&:valid?)意思是对每个project执行其save!方法,&后面跟的就是要执行的方法名称的symbol。
projects.any?(&:valid?)
projects.each(&:save!)
看完这个episode,不得不叹一句,编程就像是在说话一样,太强大了。
另外,在回复中有读者问到:如果&后的方法有argument的话,还能这样用吗?
作者的回复:Nope, it only works on very simple method calls which don't take an argument. Anything more complicated and you will need to use the full block.
还有老兄问能不能这样写:
ActorNames = Actor.find(:all).collect(&:last_name + ' ' + &:first_name)作者推荐在actor model中定义一个full_name方法,然后调用这个方法:
ActorNames = Actor.find(:all).collect(&:full_name)
没有评论:
发表评论