佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2334|回复: 15

[Ruby on Rails讨论区] 精美的21页RoR入门笔记 - 免费下载 (15楼)

[复制链接]
发表于 2-8-2006 08:35 PM | 显示全部楼层 |阅读模式


我觉得与其说RoR是一个‘快速开发框架’,倒不如说它是一个让编程员开发本身思考能力的框架。的确,许多人浪费了许多时间在重复和繁杂的源码而忘了自己在一开始原本的计划,RoR提倡那么一句话 DRY [ Don't Repeat Yourself ],这句话再简单不过,但是我们还是不停的在重复这样的错误。一些程序明明是重复的,不过我们有时却迷失在自己的源码里面。

我也尝试了将自己的‘构思’呈现在一个简陋的Blog,前后花了两个小时,当然在不熟悉操作的情况下浪费了很多时间,不过也还不错。间中突然想到的一些点子很容易的就加了进去,而且在根本不必在controller修改或加入太多的东西,一切都可以跟着感觉走。






用rake统计controller+model的code,只有86行 (本人的开发工具 -- Eclipse w/ Ruby on Rails)



如果你是RoR达人,欢迎来分享你的开发经验;如果你对RoR有兴趣,可以到rubyonrails.org看看,里面有一些非常好的documentation。
还有这里
http://rubyonrails.org/screencasts RoR的影片示范,记得看哦!

[注:希望这里注重Ruby或Rails的讨论和提问,不要把Ruby或Rails和其他语言或框架比较]


[ 本帖最后由 苦瓜汤 于 6-1-2007 09:30 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

Calverstine 该用户已被删除
发表于 2-8-2006 08:44 PM | 显示全部楼层
这是新的software product library?可以帮助programmer file 用过的coding????很好奇!!!!
回复

使用道具 举报

 楼主| 发表于 2-8-2006 08:58 PM | 显示全部楼层
原帖由 Calverstine 于 2-8-2006 08:44 PM 发表
这是新的software product library?可以帮助programmer file 用过的coding????很好奇!!!!

RoR是一个Framework,好像PHP的Zend Framework,Apache Struts,Microsoft .NET。是一个提供网页开发环境和工具的一个组合。
RoR这个组合正式发布其实不到2年,目前本地开发群也不多,所以知道的人也很少。


[ 本帖最后由 苦瓜汤 于 22-12-2006 11:57 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2-8-2006 09:00 PM | 显示全部楼层
中文的官网和Wikipedia的介绍

http://rubyonrails.org.tw/
http://zh.wikipedia.org/wiki/Ruby_on_Rails

[ 本帖最后由 苦瓜汤 于 22-12-2006 11:57 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 14-12-2006 07:56 PM | 显示全部楼层

ActionController与ActionView的迷你教学

当初尝试接触RoR时曾经遇到瓶颈,不知道从何开始,在这里做一个简单的ActionController教学,希望能够对各位有帮助。ActionController是Rails的其中一个component,在安装完Ruby和Gem后,在console内
  1. $gem install rails
复制代码

Rails就安装完毕了。到这一步,作为一个编程人员不是想要如何使用Rails,而是要想想你要做的东西,你要开始计划你的系统的结构,数据库设计,用户界面,模组等等。据个例子来说,现在你要做一个个人消费管理系统,输入以下指令:
  1. $rails wallet
复制代码

接着,你就会看到Rails自动帮你部署了基本的文件结构。先不理每一个文件夹的用途,我们先看看app这个文件夹,在里面,你会看到四个文件夹-- controllers, views, models, helpers。有MVC基础的朋友一看应该就可以知道前三者的用途;要是你还不懂MVC为何物的话,建议去Wikipedia了解了解。

是时候来测试一下了,我们首先来看看controller。
  1. $./script/generate controller Wallet index list
  2. (C:\>ruby script\generate controller Wallet index list) <-- Win32
复制代码

看看你的app/controllers文件夹,是不是多了一个wallet_controller.rb文件?用编辑器打开,内容如下:
  1. class WalletController < ApplicationController

  2.         def index
  3.         end

  4.         def list
  5.         end
  6. end
复制代码

在MVC模式中,controller是扮演处理网页请求的角色。先来看看这个url:

http://foobar.com/wallet/list

在这个url中,foobar.com是网域,wallet是controller,list是action。Rails在收到请求时,会先检查请求字串,再把请求交给指定的controller。例如以上的例子,Rails会先在controllers中检查看看有没有指定的controller可以调用;之后,controller会执行指定的action。来做一下试验吧,再WalletController中修改list这个方法:
  1.         def list
  2.                 render :text => “This is from Wallet Controller, which is now executing list action”
  3.         end
复制代码

接着输入以下指令启动Webrick服务器
  1. $./script/server (C:\>ruby script\server <= Win32)
复制代码

在浏览器中输入以下网址 http://localhost:3000。如果服务器已经启动的话,就可以看到Rails的欢迎网页。好了,接下来输入

http://localhost:3000/wallet/list

看到了什么吗?没错,就是list action所执行的方法结果。render 是ActionController的一个非常重要的方法,稍后再作一些说明,或者可以到http://api.rubyonrails.com看看更详细的说明和用法。:text=>”foobar”是一个hash,Ruby中,以”:”为开始的是一个特别的物件,叫做符号(Symbol),用途也很多,其中用作hash的key为最常见。

在这个例子里,你用了MVC结构的Controller,接下来我们来玩一玩view (ActionView)。在app/views中你看到了什么?没错,一个wallet文件夹,里面分别有index.rhtml和list.rhtml两个文件。打开list.rhtml,将里面的内容改为:
  1. <html>
  2.         <head><title>Wallet List</title></head>
  3.         <body><h2>Hello, <%= @name %></h2></body>
  4. </html>
复制代码

*注 <%=%>是Embedded Ruby(ERb) 标签,作用就好像PHP中的<? ?>。

将WalletController中的list修改一下:
  1.         def list
  2.                 @name = “FooBar”
  3.         End
复制代码

刷新一下浏览器,看看现在有什么不同了?'@'是Ruby中instance variable的标记。(关于Ruby的教学,这里有一个很好的网页
http://poignantguide.net/ruby/,用故事和漫画来说明Ruby语言)

从这个例子中,你大概可以看得出ActionController与ActionView的关系,View主要是扮演template的角色,Controller在没有定义render指令的情况下,就会在views文件夹中调用适当的template将内容回复给客户端。更多资料可以在http://api.rubyonrails.com找到。


[ 本帖最后由 苦瓜汤 于 22-12-2006 11:58 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 14-12-2006 08:15 PM | 显示全部楼层

RubyOnRails 中文教学

回复

使用道具 举报

Follow Us
发表于 14-12-2006 09:57 PM | 显示全部楼层
lz 你说的范例好像PHP里的mod_rewrite。

还有请问这是免费的吗?
回复

使用道具 举报

 楼主| 发表于 14-12-2006 10:42 PM | 显示全部楼层
原帖由 blue333 于 14-12-2006 09:57 PM 发表
lz 你说的范例好像PHP里的mod_rewrite。

还有请问这是免费的吗?

没错,RoR如果用在Apache上就必须要有mod_rewrite。
RoR是开源的
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 14-12-2006 10:56 PM | 显示全部楼层

Rails的狂想曲之 -- 将RoR变成exe

刚刚看了这个:

http://www.erikveen.dds.nl/distr ... ications/rails.html

心血来潮就跟着做一个。(注:sqlite3的安装看这里 http://wiki.rubyonrails.com/rails/pages/HowtoUseSQLite

文件有点大 不过,想到里面所包的冬冬就不计较了。



执行后,启动Webrick Server



成功!



[ 本帖最后由 苦瓜汤 于 22-12-2006 11:58 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 14-12-2006 11:38 PM | 显示全部楼层

Apple为37Signals做的宣传片

37Signals,RoR的诞生产房,看一看他们和Apple密不可分的关系

http://www.apple.com/education/whymac/compsci/video.html



[ 本帖最后由 苦瓜汤 于 14-12-2006 11:40 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 15-12-2006 08:24 PM | 显示全部楼层

Ruby号外 -- JRuby



Ruby语言是优美的,Java是一个强大的技术平台;JRuby正是一个把Ruby和Java结合的计划,目前版本为0.9.2。两个作者Charles Oliver Nutter和Thomas Enebo更被Sun System正式聘请全职开发JRuby计划,看来Sun Systems也对Ruby这个艺术语言感兴趣了。
http://www.sun.com/2006-1010/jruby/index.jsp

下载Jruby可以到 http://dist.codehaus.org/jruby
记得安装 Java Development Kit,以下我用了JDK1.5,Ruby 1.8.4和JRuby 0.9.2做了一个例子:

  1. [java]
  2. import javax.swing.*;

  3. public class HelloJava {
  4. public static void main( String[] args ){
  5.   JFrame frame = new JFrame("Hello Java!");
  6.   JLabel label = new JLabel("Hello Java!");
  7.   frame.add(label);
  8.   frame.setSize(300,300);
  9.   frame.setVisible(true);
  10. }
  11. }

  12. [ruby]
  13. require 'java'

  14. include_class ['javax.swing.JFrame','javax.swing.JLabel']

  15. frame = JFrame.new "Hello JRuby!"
  16. frame.add JLabel.new "Hello JRuby!"
  17. frame.setSize 300,300
  18. frame.setVisible true
复制代码




[ 本帖最后由 苦瓜汤 于 22-12-2006 11:58 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 18-12-2006 10:24 PM | 显示全部楼层

Ajax on Rails

相信Ajax已经和Web2.0离不开关系了,尽管一些编程员还在排斥这个技术,不过,在不久的将来,DHTML这个名词已经被淘汰,取而代之的是Ajax。在Ruby on Rails上运用Ajax可以说是很简单,强大的Prototype.js,Scriptaculous,加上RoR的RJS Template(Ruby JavaScript Generator)可以说是非常强的组合。无论是JS Object, functions improvement,Visual Effect,Remote Form Callback, In Place Editor,DragDrop, Sortable,etc应有尽有。

如何开始呢?来个实例吧:

generate一个controller,包含两个actions -- index add

  1. ./script/generate controller Ajax index add
复制代码


打开 app/views/ajax/index.rhtml编辑,加入以下内容:

  1. <html>
  2. <head>
  3. <title>Ajax Testing</title>
  4. <%= javascript_include_tag :defaults %>
  5. </head>
  6. <body>
  7. <div id="div1">To be updated</div>
  8. <%= link_to_remote 'Update Info',:url=>{:action=>'add'},:update=>'div1' %>|
  9. <%= link_to_remote 'This will failed', :url=>{:action=>'unknown'},
  10.                                         :failure=>"alert('HTTP Error:'+request.status+'!');"
  11.                                         %>
  12. </body>
  13. </html>
复制代码


上面例子用了两个Rails Helper,也就是包含在ERB Tag <%=%>的两个。javascript_include_tag :defaults在文件中加入所有Ajax所需的js script,包括prototype,effect.js,dragdrop.js,controls.js,application.j。link_to_remote则是一个加入了ajax callback的连接,:url指向发送请求的action ==> add,而:update则更新所指定的DOM (Document Object Model)物件。

打开app/controllers/ajax_controller.rb文件

  1. class AjaxController < ApplicationController
  2.   
  3.   def index
  4.   end

  5.   def add
  6.     render :inline=>'<strong>#{Time.now.to_formatted_s(:db)}</strong>'
  7.   end
  8. end
复制代码


render是一个ActionController重要的一个方法,详细用法可以看这里 http://api.rubyonrails.com/classes/ActionController/Base.html#M000206
#{}是Ruby在String内加入inline code的nest
Time.now提取目前的时间,to_formatted_s是Rails ActiveSupport的其中一个时间方法,详细用法看这里 http://api.rubyonrails.com/classes/ActiveSupport/CoreExtensions/Time/Conversions.html#M000226

完成。启动Webrick Server然后再Browser输入网址 http://localhost:3000/ajax

  1. ./script/server
复制代码


测试一下你的网页!





[ 本帖最后由 苦瓜汤 于 22-12-2006 11:59 PM 编辑 ]
回复

使用道具 举报

发表于 18-12-2006 11:09 PM | 显示全部楼层
现在还没有空闲的时间研究这个,等我开始研究了,就会麻烦你啦^^
回复

使用道具 举报

 楼主| 发表于 22-12-2006 11:55 PM | 显示全部楼层

Rails 1.2 ActiveSupport彻底展现了Ruby的美

看了新版本Rails1.2的ActiveSupport文件,惊叹Rails把Ruby弄得更迷人了.... 先看看以下例子:

1。如果说要得到3天前的日期,再扣掉2分钟

  1. >> Time.now #看看现在
  2. => Tue Dec 19 23:25:47 Malay Penisula Standard Time 2006
  3. >> 5.day.ago - 2.minute #答案
  4. => Tue Dec 17 23:23:54 Malay Penisula Standard Time 2006
复制代码


3. 再把上面的例子换成SQL格式

  1. >>(5.day.ago(Time.now - 2.minute)..Time.now).to_s(:db)
  2. => "BETWEEN '2006-12-17 23:23:54' AND '2006-12-19 23:25:47' "
复制代码


2. 把Array [1,2,3,4,5,6,7] 分成3组

  1. >> %w[1 2 3 4 5 6 7].in_groups_of(3) { |g| p g }
  2. ["1", "2", "3"]
  3. ["4", "5", "6"]
  4. ["7", nil, nil]
复制代码


3。以最快的速度从"Christmas Time"取出"Christmas"

  1. >> "Christmas Time".first(8)
  2. =>"Christmas"
复制代码


4.56 Kilobytes + 8 Terabytes 等于?

  1. >> 56.kilobyte + 8.terabytes
  2. => 8796093079552 #bytes
复制代码


5. 将1到10换成1st, 2nd, 3rd....

  1. >> (1..10).each {|n| p n.ordinalize }
  2. "1st"
  3. "2nd"
  4. "3rd"
  5. "4th"
  6. "5th"
  7. "6th"
  8. "7th"
  9. "8th"
  10. "9th"
  11. "10th"
复制代码


6. hash物件和xml的转换

  1. >> Hash.from_xml '<posts><post><id>1</id></post></posts>'
  2. => {"posts"=>{"post"=>{"id"=>"1"}}}  
  3. >> Hash.from_xml '<posts><post><id>1</id></post><post><id>2</id></post></posts>'
  4. => {"posts"=>{"post"=>[{"id"=>"1"}, {"id"=>"2"}]}}
复制代码


更多魔法 ==> http://errtheblog.com/post/44
回复

使用道具 举报

 楼主| 发表于 6-1-2007 09:29 PM | 显示全部楼层

精美的21页RoR入门笔记 - 免费下载

http://www.fearoffish.co.uk/2006/12/27/ruby-on-rails-beginners-handout

为RoR入门教学烦恼?看看这个21页的浓缩入门教学,让你体验Ruby与Rails
回复

使用道具 举报

发表于 2-3-2013 10:57 PM | 显示全部楼层
没有人讨论RoR了吗?
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-4-2024 10:47 AM , Processed in 0.066158 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表