gem uninstall progressbar
#å¸è²åŒ?br />6. gem query --local # shortcut: 'gem q -L'
#列出所有本地安装过的包
7. gem ins rake
#在本地安装,如果没有˜qœç¨‹å®‰è£…
8. gem list -b ^C
#列出所有以C开头的�br />9. gem_server
å¼€å¯rdocæœåŠ¡ã€‚å¯ä»¥æŸ¥çœ‹å®‰è£…包的rdoc
Tip 2.默认情况下,ActiveRecord会ä‹Éç”¨æŽ¨å¯ÆD¡¨æ˜Žçš„½Ž—法åQŒå¦‚æžœä½ ä¸å¸Œæœ›ä‹Éç”¨æ¤½Ž—æ³•å¯ä»¥åœ¨æŒ‡å®šçš„modelä¸ä‹Éç”?"set_table_name" æ–ÒŽ³•åQŒä¾‹å¦‚:
class Sheep < ActiveRecord::Base
 set_table_name "sheep"
end
Tip 3.SQL ¾cÕdž‹å’ŒRuby ¾cÕdž‹ä¹‹é—´çš„对应关¾pÕd¯èƒ½ä¼šåœ?decimal ¾cÕdž‹çš„精度上出现问题。SQLçš?demimal,numeric,float,double 都对åº?Ruby çš?Float。å¯ä»¥ä‹É用èšåˆå¯¹è±?composed_of 对嗌Dµè¿›è¡Œå¤„ç†ã€‚                                                                                                                                                                                        Â?
Tip 4.ActiveRecord会尽é‡çš„æŠŠä»Žæ•°æ®åº“ä¸èŽ·å–çš„å€ÆD{æ¢äØ“Ruby的类型(è¬å¦‚è¯ß_¼Œå‡è®¾æ•°æ®åº“å—ŒD‰|˜¯ timestamp ¾cÕdž‹çš„,ž®×ƒ¼š˜q”回 Time 对象åQ‰ã€‚å¦‚æžœä½ å¸Œæœ›å¾—åˆ°ä¸€ä¸ªå±žæ€§çš„åŽŸå§‹å€û|¼Œå¯ä»¥åœ¨å±žæ€§å¿U°åŽé¢åŠ ä¸?_before_type_cast.
Tip 5.Ruby è®¤äØ“åQšé™¤äº?nil å’?false ä¹‹å¤–çš„æ‰€æœ‰å€¼éƒ½è¢«è§£é‡ŠäØ“ trueã€‚æ‰€ä»¥ï¼Œå¦‚æžœè¦æŸ¥è¯¢ä¸€ä¸?boolean 型嗌D늚„状æ€ï¼Œž®±å¿…™åÕdœ¨å—段åçš„åŽé¢åŠ ä¸Šä¸€ä¸ªé—®åøP¼š
user = User.find_by_name("Dave")
if user.superuser? # ä¸å¯ä»¥ä‹Éç”?user.superuseråQŒå¦åˆ™ä¸è®ºæ•°æ®åº“ä¸å˜å‚¨çš„æ˜¯æ•°å?0ã€å—½W¦ä¸² f ˜q˜æ˜¯å¾¯‚¯çš?NåQŒæ¤æ¡äšg都将æˆç«‹ã€?br /> grant_privileges
end
Ruby on Rails是一个很ä¸é”™çš„web开呿¡†æžÓž¼Œä¸è¿‡ç”׃ºŽç›®å‰å…¶æœ¬íw«å¯¹å›½é™…化的支æŒè¾ƒå·®åQŒæ‰€ä»¥éœ€è¦ä¸€äº›è¾…助的东西æ¥è§£å†›_›½é™…化问题ã€?/font>
我最先ä‹É用的是一个å«localizationçš„æ’ä»Óž¼Œ˜q™ä¸ªæ’äšgçš„ä‹É用说明在Ruby on Rails官方的wikiä¸Šé¢æœ‰ï¼Œ˜q™ä¸ªæ’äšg使用比较½Ž€å•,ä¸è¿‡åŠŸèƒ½æ¯”è¾ƒå¼±ã€?/font>
ç›®å‰ä½¿ç”¨çš„æ˜¯Ruby-GetTextåQŒè¿™ä¸ªæ’件功能强大,åŸÞZºŽGNUçš„gettextåQŒè¯¦¾l†çš„使用说明åœ?/font> http://manuals.rubyonrails.com/read/chapter/105 ä¸Šé¢æœ‰å†™åQŒæˆ‘大概æä¸€ä¸‹è¦ç‚¹ï¼š
é¦–å…ˆè¦æ˜¯Ruby on Rails支æŒUTF-8åQŒé€šè¿‡ž®†å¦‚ä¸‹ä»£ç æ·»åŠ åˆ°environment.rbä¸ï¼š
$KCODE = ‘u�br />require ‘jcode�/font>
æŽ¥ç€æ˜¯å®‰è£…Ruby-GetTextåQŒè¿è¡Œgem install gettextž®±å¯ä»¥äº†åQŒå¦‚果是Windowsòq›_°ž®±é€?åQŒå¦åˆ™é€?。接瀞®±æ˜¯åœ¨é¡¹ç›®æ ¹ç›®å½•下é¢åˆ›å¾po目录åQŒé‡Œé¢æ·»åŠ ä½ éœ€è¦Localeçš„åå—作为å目录åQŒæ¯”如en, zh_CN½{‰ã€‚需è¦å›½é™…化的嗽W¦ä¸²éƒ½ä»¥_(â€?)æ¥ä¹¦å†™ï¼Œæ¯”如惛_›½é™…化“编辑â€è¿™ä¸ªæ ‡½{¾ï¼Œž®±å¯ä»¥åœ¨è§†å›¾çš„rhtmlä¸ä‹É用_(â€Editâ€?åQŒè¿™æ ·åœ¨æ˜„¡¤ºçš„æ—¶å€™ä¼šè‡ªåЍæ ÒŽ®Localeæ¥æ›¿æ¢æˆç›¸åº”的倹{€?/font>
接ç€åœ¨é¡¹ç›®çš„rakefile里é¢å¦‚下内容åQ?/font>
desc “Create mo-files for L10n�br />task :makemo do
 GetText.create_mofiles(true, “po� “locale�
end
éœ€è¦æ³¨æ„的是在上颾l™å‡ºçš„é“¾æŽ¥çš„é‚£ç¯‡æ–‡ç« é‡Œé¢åQŒè¿˜éœ€è¦æ·»åŠ updatepo˜q™æ ·ä¸€ä¸ªç›®æ ‡ï¼Œä¸è¿‡˜q™ä¸ªç›®æ ‡åœ¨æˆ‘˜q™ä¸èµ·ä½œç”¨ï¼Œæ€ÀL˜¯å‡ºé”™åQŒæˆ‘的办法是下è²é‚£ç¯‡æ–‡ç« 附带的代ç : http://www.digitale-wertschoepfung.de/artikel/gettext/using-gettext-with-rails.tgz 。在里é¢çš„scriptç›®å½•ä¸‹é¢æœ‰ä¸€ä¸ªlocalizeæ–‡äšgåQŒæŠŠå®ƒæ‹·è´åˆ°ä½ çš„™å¹ç›®çš„script目录下é¢åQŒç„¶åŽè¿è¡Œruby ./script/localize {文本域的åå—}ž®±å¯ä»¥ä»Žcontrollers, views䏿›´æ–°poæ•°æ®åQŒç”¨Unicode¾~–辑器(比如UltraEditåQ‰ä¿®æ”¹å„个poæ–‡äšgåQŒç„¶åŽè¿è¡Œrake makemož®±å¯ä»¥äº†ã€‚关于如果修改application.rbåŠå…¶ä»–controller的代ç ,查看¾l™å‡ºçš„é“¾æŽ¥ã€‚æ¤æ—‰™‡æ–°å¯åЍserveråQŒå°±å¯ä»¥æŸ¥çœ‹æ•ˆæžœäº†ã€?/font>
  元编½E‹åÆˆä¸æ˜¯ä¸€ä¸ªå¾ˆæ–°çš„æ¦‚念åQŒé€šå¸¸å…ƒç¼–½E‹è¢«è®¤äؓ是通过½E‹åºæ¥ç”Ÿæˆç¨‹åºï¼Œå¦‚果从这¿Uæ„义上æ¥è€ƒè™‘åQŒé‚£ä¹ˆlexå’Œyacc以åŠJavaCC应该都å¯ä»¥ç®—是具有了元编½E‹çš„æ¦‚念åQŒåœ¨Javaä¸ï¼Œå…ƒç¼–½E‹å¾—åˆîCº†òq¿æ³›çš„应用。但在Rubyä¸ï¼Œå…ƒç¼–½E‹çš„使用å˜å¾—相当的简å•å’Œå®ÒŽ˜“实现åQŒä‹É用Rubyè¯è¨€æœ¬èínæ¥äñ”生Ruby代ç åQŒä¸éœ€è¦å€ŸåŠ©å¤–éƒ¨çš„å·¥å…øP¼Œè‘—åçš„RoR框架ž®±æ˜¯å»ºç«‹çš„Ruby元编½E‹çš„基础上的。å¯èƒ½ä½ ä½ å¯¹å…ƒç¼–½E‹è¿˜æ²¡ä»€ä¹ˆæ¦‚念,但是Rubyå·²ç»å†…å¾äº†å…ƒ¾~–程˜q™ç§æœºåˆ¶åQŒæ‰€ä»¥å¾ˆæœ‰å¯èƒ½ï¼Œä½ 在ä¸çŸ¥ä¸è§‰ä¸å°±å·²ç»ä½¿ç”¨äº†Ruby元编½E‹æŠ€æœ¯äØ“ä½ å¸¦æ¥çš„æ–¹ä¾¿ä¹‹å¤„。如下题q™æ®µä»£ç åQ?/font>
class Person
  在Ruby On Railsä¸ï¼Œæœ‰ä¸€ä¸ªORæ˜ å°„å±‚ï¼Œž®±æ˜¯åЍæ€çš„ä»Žä¸€å¼ å…³¾p»è¡¨æ˜ å°„åˆîC¸€ä¸ªå¯¹è±¡ï¼Œ˜q™ä¸»è¦ç”±ActiveRecord¾cÀL¥å®žçŽ°ã€‚åœ¨ORæ˜ å°„æ¨¡åž‹ä¸ï¼Œž®†å…³¾pÀL•°æ®åº“ä¸çš„å…³ç³»è¡¨è¡¨æ˜ å°„åˆ°å¯¹è±¡æ¨¡åž‹æ—¶åQŒå°†å…³ç³»è¡¨çš„è¡¨åæ˜ 射到类å,表ä¸çš„æ¯ä¸€ä¸ªå…ƒ¾l„æ˜ ž®„到对应于这个类的一个对象,元组的一个嗌Dµå¯¹åº”于对象的一个属性ã€?/font>
å‡å¦‚我们有一个ä¿å˜èŒå‘˜åŸºæœ¬ä¿¡æ¯çš„æ–‡äšgåQŒæ–‡ä»¶çš„æ ¼å¼æ˜¯è¿™æ ïLš„åQšç¬¬ä¸€è¡Œæ˜¯æ–‡äšg内容的æ¯ä¸ªå—ŒD늚„åç§°åQŒä»Ž½W¬äºŒè¡Œå¼€å§‹ï¼Œåˆ™æ˜¯æ¯ä¸ªèŒå‘˜çš„基本信æ¯ã€‚现在我们有一个文件å为“employee.txtâ€çš„æ–‡äšgåQŒå…¶å†…容如下所½Cºï¼š
name,age,gender
"John", 23, "male"
"Linclon", 25, "male"
å‡è®¾æˆ‘们ž®Þp¦ä»Žè¿™ä¸ªæ–‡æœ¬æ–‡ä»¶ä¸è¯Õd–æ•°æ®åQŒåƈ˜q›è¡Œä¸€å®šçš„处ç†ã€‚如果是使用C++¾~–程åQŒä½ 首先一定会惛_ˆ°åº”该定义一个Employee¾c»ï¼Œç„¶åŽ˜q™ä¸ª¾cÖM¸æœ‰name, age, gender˜q™äº›æˆå‘˜å˜é‡ã€‚但是是采用˜q™ç§æ–ÒŽ³•çš„è¯åQŒå¯ä»¥å‘玎ͼŒå¦‚果惛_œ¨èŒå‘˜ä¿¡æ¯ä¸åŠ å…¥ä¸€ä¸ªå—ŒDµï¼Œæ¯”如部门åQˆdepartmentåQ‰ï¼Œž®×ƒ¸å¾—ä¸ä¿®æ”¹Employee¾cÈš„代ç åQŒåœ¨Employee¾cÖM¸å¢žåŠ ä¸€ä¸ªâ€œdepartmentâ€æˆå‘˜å˜é‡ï¼Œæ‰€ä»¥æˆ‘ä»¬çš„ä»£ç æ˜¯é«˜åº¦ä¾èµ–于文äšgçš„å…·ä½“æ ¼å¼ï¼Œ˜q™å½“ç„¶ä¸æ˜¯ä¸€ä¸ªå¥½çš„现象。我们希望有一¿Uæ›´½Ž€å•和优雅的方案,˜q˜æœ‰åQŒRubyåŠ¨æ€æ€§æé«˜ç»™æˆ‘们一个解å†Ïx–¹æ¡ˆï¼Œä½†æ˜¯åQŒæˆ‘们应该从和下手呢åQŒè¿™ž®±éœ€è¦Ruby的元¾~–程能力ã€?/font>
  首先åQŒæˆ‘们想应该有一个èŒå‘˜ç±»åQŒåœ¨Railsä¸ï¼Œæ¯ä¸ªå…³ç³»è¡¨çš„å称会æˆä¸ºç±»çš„å¿UŽÍ¼Œåœ¨è¿™é‡Œï¼Œé‡‡ç”¨¾cÖM¼¼çš„æ–¹æ³•,ž®†æ–‡æœ¬æ–‡ä»¶çš„åç§°ä½œäØ“¾cÈš„åç§°åQŒåœ¨Rubyä¸ï¼Œ¾cÕdåŒæ—¶ä¹Ÿæ˜¯ä¸€ä¸ªå¸¸é‡ååQŒæ‰€ä»¥ç¬¬ä¸€ä¸ªå—æ¯å¿…™åÖMؓ大写åQŒæˆ‘们ä‹Éç”¨å¦‚ä¸‹çš„ä»£ç æ¥ç”Ÿæˆç±»åã€?/font>
class_name = File.basename(file_name, ".txt").capitalize
# "employee.txt" => "Employee"
klass = Object.const_set(class_name, Class.new)
Class.new生æˆä¸€ä¸ªæ–°çš„ç±»åQŒè¿™ä¸ªç±»çš„å¿U°æ˜¯åŒ¿å的,所以采用const_setæ“作æ¥ç»‘定一个类å,å˜é‡klass是新¾cÕdž‹çš„引用ã€?/font>
生æˆäº†è¿™ä¸ªç±»ä»¥åŽåQŒéœ€è¦æƒ³˜q™ä¸ª¾cÀL·»åŠ å§“å,òq´é¾„和性别˜q™äº›å±žæ€§ï¼Œ˜q™äº›å±žæ€§çš„å称是在文本文äšg的的½W¬ä¸€è¡Œä¸¾l™å‡ºçš„ã€?br />
data = File.new(file_name)
header = data.gets.chomp
data.close
names = header.split(",")
下é¢çš„代ç ç»™å‡ÞZº†å¦‚何生战q™äº›å±žæ€§ï¼Œä»¥åŠåˆå§‹åŒ–这些属性倹{€?br />
现在åQŒæœ‰äº†ä¸€¾pÕdˆ—的访问ååQˆå¯è¯Õd’Œå¯å†™åQ‰ï¼Œé€šè¿‡instance_variable_setæ–ÒŽ³•åQŒåˆ¾l™æ¯ä¸ªå±žæ€§åšäº†åˆå§‹åŒ–ã€?br />
å˜é‡names是在å—外部定义的åQŒç”±äºŽå—çš„é—åˆæ€§ï¼Œæ‰€ä»¥å˜é‡names在å—ä¸ä¹Ÿæ˜¯æœ‰æ•ˆçš„。当ç„Óž¼Œä¸ÞZº†½E‹åºçš„æ¼”½Cºï¼Œåˆå®šä¹‰çš„了一个to_sæ–ÒŽ³•åQŒä»£ç 如下所½Cºï¼š
  完æˆäº†è¿™äº›ä»¥åŽï¼Œå¯¹äºŽ¾cÈš„æž„é€ å·²¾l基本结æŸäº†åQŒçŽ°åœ¨å°±éœ€è¦çœŸæ£çš„从文本文件ä¸è¯Õd–æ•°æ®äº†ã€‚从文本文äšgè¯ÀL•°æ®åº”该是一个类æ–ÒŽ³•åQŒè€Œä¸æ˜¯ä¸€ä¸ªå®žä¾‹çš„æ–ÒŽ³•åQŒå…¶å®žçް代ç 如下åQ?br />
在这个方法ä¸åQŒä‹É用å—çš„ç±»åæ¥åŒšw…相关的文ä»Óž¼Œæ¯”如ž®†Employee¾cÀL˜ ž®„到“employee。txtâ€ã€?br />
ç„¶åŽåQŒä»Žæ–‡äšgä¸è¯»å–èŒå‘˜ä¿¡æ¯ï¼Œç”׃ºŽ½W¬ä¸€è¡Œæ˜¯å—段定义åQŒæ‰€ä»¥è¦èˆå¼ƒ½W¬ä¸€è¡Œæ•°æ®ã€‚从½W¬äºŒè¡Œå¼€å§‹è¯»å–æ•°æ®ï¼Œæ¯è¯»å–一行数æ®ï¼Œåˆ™æž„é€ ä¸€ä¸ªEmployee实例ã€?font color="black">通过上题q™ä¸ª½Ž€å•的例ååQŒæˆ‘们å¯ä»¥çœ‹å‡ºå…ƒ¾~–程的功能是相当之强大的åQŒä‹É用元¾~–程技术,å¯ä»¥æž„é€ ç›¸å½“ç®€å•,优雅的解å†Ïx–¹æ¡ˆã€?/font>
1.安装Ruby
http://rubyforge.org/frs/?group_id=167
˜q™é‡Œæœ‰windows一键安装版æœ?/font>
2.在线安装Rails
C:\> gem install rails --include-dependencies
以上æ–ÒŽ³•在一般情况下都是å¯è¡Œçš? 但如果ä¸è¡Œçš„è¯? ˜q˜å¯å‚照以下æ–ÒŽ³•:
1. 讉K—®:http://instantrails.rubyforge.org/wiki/wiki.pl
 Â
Â Â ä¸‹è²æœ€æ–°ç‰ˆæœ¬çš„InstantRails
2. 解压åˆîC½ 指定的目录下, 注æ„, 目录å?包括路径å?ä¸èƒ½æœ‰ç©ºæ ?br />
3. 讉K—®å…¶ä¸çš„readme.txt, 里é¢è¯¦ç»†è¯´æ˜Žäº†å¦‚何酾|®å’Œ˜q行InstantRails