三 20
我们在页面上进行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,我有个惊奇的开始,我的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
一时想不起来如何拼写了,写在这里作为笔记。
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
/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
网上的文章讲的都是在 ~/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设计了,这是一个极其糟糕的设计和用户体验。我刚才又忘记哪个是暂停功能了。(这是一个新功能,之前只能是无奈的关闭播放功能)
有图有真相:

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

也就是说:点击“欧美”,可以暂停的狗shi逻辑。
我受不了啦!如果想做的好,就不要给对手留下漏洞,“防守是门艺术”,送上此句。
十一 13
第一步安裝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
问题:
gem 'ultraviolet', '0.10.2'
bundle install
代码highlight的时候,require 'uv' 失败。
提示:uninitialized constant PadsHelper::Uv
解决办法:gemfile中,改为
gem 'ultraviolet', '0.10.2', :require => "uv"
搞定。
最近在弄一个小项目,为程序员们提供一个简单舒适的代码经验管理工具。demo出来后希望大家支持。
十 30
从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
笔记一下,不常用的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