www.appflying.com,iPhone and iPad, top Apps, drop price.
20

errors.add_to_base和errors.add

分类:RailsNote | 给我留言 |

我们在页面上进行ajax校验属性的时候,有两种情况会碰到。

一种是,只要出错,就给一个提示。这个比较常见的就是“您填写的用户名或密码不正确”。因为这里可能做了三组判断,先判断用户名是否存在,然后是密码是否为空,三是两者能否检索出一条纪录。如果那个出现为空,就直接返回false,controller也就直接宣布了上面那句话。

第二种比较复杂,就是每个属性都会给一个详细的解释,甚至多个解释,比如邮件格式不正确,邮件不能为空,邮件应该以字母开头等等。因为ajax判断有时候不一定会把model实例传回来,而可能只给一个message,让view去针对该输入进行提示,比如那个经典的输入矿失去焦点时校验。

针对上面两种方法,我经常用到的就是 errors.add_to_base 和 errors.add 方法。这里做以笔记。内容来自rdoc

 
def validate!
    errors.add(:name, "can not be nil") if name == nil
end
 
 
def validate!
    errors.add_to_base("can not be nil") if name == nil
end
 

其实,它们是一样的

 
def add_to_base(msg)
    add(:base, msg)
end
 

做以笔记,因为有时候真的会忘记这些小代码。

补充几个方法:

 
def Person.human_attribute_name(attr, options = {})
    attr
end
 

它可以把名称更人性化的输出,比如“first_name” 输出为 "First name"。但是它是一个过时的方法,我们会得到一个提示:"ActiveRecord::Errors#generate_message has been deprecated. Please use ActiveRecord::Error.new().to_s."

 
    company = Company.create(:address => '123 First St.')
    company.errors.on(:name)      # => ["is too short (minimum is 5 characters)", "can't be blank"]
    company.errors.on(:email)     # => "can't be blank"
    company.errors.on(:address)   # => nil
 

显而易见

 
def on_base
    on(:base)
end
 

对上面方法的一个补充。

我喜欢netbeans的一个很重要原因就是查看这些代码的doc很方便,有时候一个简单的方法附近的doc就能读上和体会一阵子。呵呵。

其他实用的方法欢迎各位补充。

25

2011,让APP飞一会吧

分类:default | 给我留言 |

2011,我有个惊奇的开始,我的iTouch有一天突然可以上网了,原因不明。紧接着几天,接触了一个开发项目,是做一个APP介绍的网站。可以用Rails。这一点实在让我暗地里欢喜:可算有得发挥了。接着,《让子弹飞》上映,那就让APP也跟着飞一会吧。

经过一个多月的敲敲打打,www.myappblog.net 正式上线了,这里把以往Rails2.x用过的技术,在Rails3.0平台上又加强了一遍,认真体会了一下Rails 3带来的变革。

MyAPPBlog网站是一个iPhone,iPad应用推荐,点评的网站,上面还增加了很多视频,讲解游戏的玩法,看得我实在兴奋阿。对于不经常逛app store的我来说,没事看看MyAppBlog的资讯,能发现太多不知道的事情。MyAPPBlog就像一本App杂志,很方便,而且,它是我的又一个五星级的程序作品。(哈哈)

从MyAPPBlog的网站定位上,可以看到它的特点:一是信息分享,比如最新的资讯,免费的app,二是APP操作视频,强烈建议把怒鸟的攻略发布一下,因为某人。。。。

说说程序,MyAPPBlog用了haml和sass,这极大的提高了页面的可维护性。这不是一点点的改变,而是把页面结构,设定的更加规范,比如div class的设计

.title

= @app.title

这样就实现了一个div层的结构。sass我目前用到它三个特性,变量,命名空间和继承。

Rails3让MyAPPBlog的维护更加方便,尤其是之前很难受的fckeditor的附件处理,Rails3上可用的ckeditor gem,直接用了paperclip,图片文件上传省了很多代码。

后面的工作集中在app store的数据分析上,任务挑战很大,但应用前景非常看好。

这里稍微提一下,个人对工作的定义也有了一些改进,目前的工作应该叫技术支持。

大多数人理解的外包是拿钱走人的形式,所以,技术支持,就是一个长期的服务状态,在Rails的领域里进行不断的积累,将自身的成果分享给每一个客户。

写在最后:

夜深人静,32岁的人,已经没有了当年创业时候的冲动,也没有开发搜索引擎时候的韧劲。事情按部就班的继续,看着一群比自己小10岁的年轻人,他们是不是也在经历我过去10年所做过的事情呢?我现在做的,未来做的,是不是他们10年后也要来做的呢?

06

paperclip上传后的原图大小

一时想不起来如何拼写了,写在这里作为笔记。
has_attached_file :icon,
:styles => { :original => "74x74" }, # 将paperclip上传原图做大小限制
:url => "/:class/:attachment/:id/:style_:basename.:extension",
:path => ":rails_root/public/:class/:attachment/:id/:style_:basename.:extension",
:default_url => "/images/sample_icon.png"
02

heroku部署问题,是gem升级导致的这个问题

分类:default | 给我留言 |

/Library/Ruby/Site/1.8/rubygems/remote_fetcher.rb:176:in `fetch_path': timed out (http://rubygems.org/quick/Marshal.4.8/mail-2.2.13.gemspec.rz) (Gem::RemoteFetcher::FetchError)

先把Gemfile.lock中的

mail (2.2.6.1)
改成
mail (2.2.5)
然后bundle update 一下 (这是参照 http://stackoverflow.com/questions/4574176/heroku-push-rejected-failed-to-install-gems-via-bundler 的意见)
这时mail的一行已经改为
mail(2.2.13)
然后再次部署,搞定。yeah!!
ps:我的rails是3.0.0,这是一个小项目,页面是客户设计的,很漂亮。为了保持磨沙的效果,png比较大,以后再去优化图片吧。
十二 29

如何安装TextMate的haml.tmbundle

分类:TextMate | 给我留言 |

网上的文章讲的都是在  ~/Library/"Application Support"/TextMate/Bundles/ 目录下,可我的偏偏不是,难道是。。。?

所以,笔记下我的安装方法:

cd /Applications/TextMate.app/Contents/SharedSupport/Bundles/

安装haml

git clone git://github.com/textmate/ruby-haml.tmbundle.git

安装sass

git clone git://github.com/charlesr/ruby-sass-tmbundle.git "Ruby Sass.tmbundle"

安装scss

git clone git://github.com/kuroir/SCSS.tmbundle.git "SCSS.tmbundle"

十二 16

糟糕之极的豆瓣电台ui设计

我再也忍受不了豆瓣电台的ui设计了,这是一个极其糟糕的设计和用户体验。我刚才又忘记哪个是暂停功能了。(这是一个新功能,之前只能是无奈的关闭播放功能)

有图有真相:

A:“换台”,功能。

B:暂停功能。

这种隐藏功能是需要你鼠标放上去看文字提示才会懂的东西,居然还放错了位置。当我想切换电台的时候,会去找一个抽象的图标,还是直接点击“欧美”来换台呢?我的下意识当然告诉我要点最直接的,这难道不正是dont make me think 的事情吗?可是,豆瓣电台的实事不会这样,真有点像和我儿子玩点头不算摇头算的游戏。

之后,B竟然是暂停,然后再点一下,才能恢复。如图:

也就是说:点击“欧美”,可以暂停的狗shi逻辑。

我受不了啦!如果想做的好,就不要给对手留下漏洞,“防守是门艺术”,送上此句。

十一 13

Autotest and Growl

分类:RailsNote | 给我留言 |

第一步安裝Growl
http://growl.info/index.php 注意要安裝擴展中的 growlnotify。 growlnotify is a command-line tool to post Growl notifications.

第二步設置Growl
Open the Growl Preference Panel (System > Growl) and activate "Listen for incoming notifications" and "Allow remote application registration" options on the Network tab.

第三步安裝相關gem
1 gem install autotest
2 gem install ZenTest
3 gem install autotest-rails-pure
autotest 和 ZenTest 缺一不可,下面的gem不用安裝,不過這講了 autotest-rails-pure 的功用。

https://github.com/svoop/autotest-growl

4 gem install notifier

https://github.com/fnando/notifier

5 gem install test_notifier

https://github.com/fnando/test_notifier

第四步配置 ~/.autotest 文件
添加如下 require "test_notifier/runner/autotest"

附1:如果使用RSpec 2 需要在 spec_helper.rb 文件中添加 require "test_notifier/runner/rspec"
附2:不要相信什麼autotest和ZenTest裝一個就可以的鬼話,我親身測試,缺一不可。另外即便你使用Rails3,也不需要在Gemfile進行配置了,因為它要操作Growl的,你再怎麼配置文件也沒辦法保證其它開發者和你一樣安裝了Growl並且設置好了它的屬性,所以讓別人玩蛋去吧~
附3:考慮到看文章的人有可能還是從Rails1.×的時代過來的,那麼加一句,現在執行 autotest 後面不用加那個 . 了

本文參考 http://exviva.posterous.com/running-autotest-with-rails-3

十一 09

有了ultraviolet,可是没有uv,怎么办?

问题:
gem 'ultraviolet', '0.10.2'
bundle install
代码highlight的时候,require 'uv' 失败。
提示:uninitialized constant PadsHelper::Uv

解决办法:gemfile中,改为

gem 'ultraviolet', '0.10.2', :require => "uv"

搞定。

最近在弄一个小项目,为程序员们提供一个简单舒适的代码经验管理工具。demo出来后希望大家支持。

30

Flex build4 和Rails资源笔记

从infoq上看到了flex builder4的介绍。07年知道flex的时候就很关注它,也写了一点在这个博客上。那个时候还是测试版。现在已经发展到了4,并且flex的书越来越多。rails的新书貌似不多了。

在这里下载中文版:http://www.infoq.com/cn/vendorcontent/show.action?vcr=664

安装完看了一下,大概的思路还是懂的,然后写了个小测试,实现从 http://blog-in-rails3.heroku.com/ 获得members和posts数据。(这是一个Rails3的练习作品)

在github上看到了 http://github.com/danielwanja/flexonrails,这里有很多代码实例,看完一个,收益很多。

另外,http://www.manning.com/armstrong/ 有一些实例代码,可做参考。(有点老,书还是08年的,想想真是遥远阿,坎坷的08年。。。)

09

Rails3:rails destroy scaffold Page

分类:RailsNote | 给我留言 |

笔记一下,不常用的destroy命令,和generate相反。有时候写错了一个关键的地方,随手想删掉,就想到它了。比如刚才。。。

liwei$ rails destroy --help
Usage: rails destroy GENERATOR [args] [options]
General options:
-h, [--help]     # Print generator's options and usage
-p, [--pretend]  # Run but do not make any changes
-f, [--force]    # Overwrite files that already exist
-s, [--skip]     # Skip files that already exist
-q, [--quiet]    # Suppress status output
Please choose a generator below.
Rails:
controller
generator
helper
integration_test
mailer
migration
model
observer
performance_test
plugin
resource
scaffold
scaffold_controller
session_migration
stylesheets
liwei$ rails destroy scaffold Page
...
目前在学习Rails3,haml,scss和一些基础的东西。笔记比较零碎。对了,练习的代码都部署到heroku上了,我发现它真的好强大了。git还是不太熟,加油。
git:http://github.com/liwei78/blog
欢迎加我的github:http://github.com/liwei78
  • 信息发布
macbook pro



关于 里克
里克:本名李玮,全职SOHO开发,技术咨询
邮件:hi@liwei.me
QQ:5175486
MSN:liwei78@live.com
05年开办公司,从事企业网站开发及维护,后从事社会化搜索引擎研发,08年底至今从事sns开发。近期专注Rails3,工作笔记整理及iphone开发学习。

狂爱Fm系列游戏。喜欢研究电影。关注IT新闻。写原创剧本和使用the movies拍摄短片,剪辑能力极强。美剧迷。狂热的英超曼城球迷。32岁的东北人。