查看: 2343|回复: 15
|
[Ruby on Rails讨论区] 精美的21页RoR入门笔记 - 免费下载 (15楼)
[复制链接]
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 14-12-2006 07:56 PM
|
显示全部楼层
ActionController与ActionView的迷你教学
当初尝试接触RoR时曾经遇到瓶颈,不知道从何开始,在这里做一个简单的ActionController教学,希望能够对各位有帮助。ActionController是Rails的其中一个component,在安装完Ruby和Gem后,在console内
Rails就安装完毕了。到这一步,作为一个编程人员不是想要如何使用Rails,而是要想想你要做的东西,你要开始计划你的系统的结构,数据库设计,用户界面,模组等等。据个例子来说,现在你要做一个个人消费管理系统,输入以下指令:
接着,你就会看到Rails自动帮你部署了基本的文件结构。先不理每一个文件夹的用途,我们先看看app这个文件夹,在里面,你会看到四个文件夹-- controllers, views, models, helpers。有MVC基础的朋友一看应该就可以知道前三者的用途;要是你还不懂MVC为何物的话,建议去Wikipedia了解了解。
是时候来测试一下了,我们首先来看看controller。
- $./script/generate controller Wallet index list
- (C:\>ruby script\generate controller Wallet index list) <-- Win32
复制代码
看看你的app/controllers文件夹,是不是多了一个wallet_controller.rb文件?用编辑器打开,内容如下:
- class WalletController < ApplicationController
- def index
- end
- def list
- end
- 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这个方法:
- def list
- render :text => “This is from Wallet Controller, which is now executing list action”
- end
复制代码
接着输入以下指令启动Webrick服务器
- $./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,将里面的内容改为:
- <html>
- <head><title>Wallet List</title></head>
- <body><h2>Hello, <%= @name %></h2></body>
- </html>
复制代码
*注 <%=%>是Embedded Ruby(ERb) 标签,作用就好像PHP中的<? ?>。
将WalletController中的list修改一下:
- def list
- @name = “FooBar”
- 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
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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是开源的 |
|
|
|
|
|
|
|
楼主 |
发表于 14-12-2006 10:56 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 14-12-2006 11:38 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做了一个例子:
- [java]
- import javax.swing.*;
- public class HelloJava {
- public static void main( String[] args ){
- JFrame frame = new JFrame("Hello Java!");
- JLabel label = new JLabel("Hello Java!");
- frame.add(label);
- frame.setSize(300,300);
- frame.setVisible(true);
- }
- }
- [ruby]
- require 'java'
- include_class ['javax.swing.JFrame','javax.swing.JLabel']
- frame = JFrame.new "Hello JRuby!"
- frame.add JLabel.new "Hello JRuby!"
- frame.setSize 300,300
- 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
- ./script/generate controller Ajax index add
复制代码
打开 app/views/ajax/index.rhtml编辑,加入以下内容:
- <html>
- <head>
- <title>Ajax Testing</title>
- <%= javascript_include_tag :defaults %>
- </head>
- <body>
- <div id="div1">To be updated</div>
- <%= link_to_remote 'Update Info',:url=>{:action=>'add'},:update=>'div1' %>|
- <%= link_to_remote 'This will failed', :url=>{:action=>'unknown'},
- :failure=>"alert('HTTP Error:'+request.status+'!');"
- %>
- </body>
- </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文件
- class AjaxController < ApplicationController
-
- def index
- end
- def add
- render :inline=>'<strong>#{Time.now.to_formatted_s(:db)}</strong>'
- end
- 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
测试一下你的网页!
[ 本帖最后由 苦瓜汤 于 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分钟
- >> Time.now #看看现在
- => Tue Dec 19 23:25:47 Malay Penisula Standard Time 2006
- >> 5.day.ago - 2.minute #答案
- => Tue Dec 17 23:23:54 Malay Penisula Standard Time 2006
复制代码
3. 再把上面的例子换成SQL格式
- >>(5.day.ago(Time.now - 2.minute)..Time.now).to_s(:db)
- => "BETWEEN '2006-12-17 23:23:54' AND '2006-12-19 23:25:47' "
复制代码
2. 把Array [1,2,3,4,5,6,7] 分成3组
- >> %w[1 2 3 4 5 6 7].in_groups_of(3) { |g| p g }
- ["1", "2", "3"]
- ["4", "5", "6"]
- ["7", nil, nil]
复制代码
3。以最快的速度从"Christmas Time"取出"Christmas"
- >> "Christmas Time".first(8)
- =>"Christmas"
复制代码
4.56 Kilobytes + 8 Terabytes 等于?
- >> 56.kilobyte + 8.terabytes
- => 8796093079552 #bytes
复制代码
5. 将1到10换成1st, 2nd, 3rd....
- >> (1..10).each {|n| p n.ordinalize }
- "1st"
- "2nd"
- "3rd"
- "4th"
- "5th"
- "6th"
- "7th"
- "8th"
- "9th"
- "10th"
复制代码
6. hash物件和xml的转换
- >> Hash.from_xml '<posts><post><id>1</id></post></posts>'
- => {"posts"=>{"post"=>{"id"=>"1"}}}
- >> Hash.from_xml '<posts><post><id>1</id></post><post><id>2</id></post></posts>'
- => {"posts"=>{"post"=>[{"id"=>"1"}, {"id"=>"2"}]}}
复制代码
更多魔法 ==> http://errtheblog.com/post/44 |
|
|
|
|
|
|
|
楼主 |
发表于 6-1-2007 09:29 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 2-3-2013 10:57 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|