第一个rails简单示例
每学一门语言的第一步都是充满坎坷的(也许是个人问题,哈哈)。插几句“广告”,前几天看了《Ruby Programming》中文版,觉得写得不错,够基础。灰常适合初学者。今天时间比较充裕,所以在看《应用Rails进行敏捷Web开发》,按照上面的第一个rails示例来进行我的第一个rails示例。
啰嗦几句:rails是强制的mvc框架,默认做了很多工作,这样就必须有很多约定,然后这些约定必然为造成一定的麻烦。引用《应用Rails进行敏捷Web开发》一书中的一幅图(个人觉得很经典),对一次url请求的解析:
开始“第一个rails程序”之旅
1、 创建rials项目
声明,本人用aptana studio 3 eclipse插件。创建rails项目,不多说,如下图:
2、 创建完成后rails项目结构,如下图:
也在摸索中,不过看文件夹名称就应该知道里面放的是啥。哈哈。
3、 创建say_controller.rb,位置如下图:
4、 输入灰常简单的代码,如下:
#endoding: utf-8 class SayController < ApplicationController def hello end end
5、 启动rails server,eclipse中需开启一个终端,然后输入:rails server 或者rails s。
Eclipse中终端位置如下图:
开启终端,输入命令后:
6、 输入:http://localhost:3000/say/hello
如果出现下图所示,表明调用成功:
注:在《应用Rails进行敏捷Web开发》一书中,输入http://localhost:3000/say/hello现实如下图:
这个可能是rails版本的问题。具体不详,但也不影响什么。
第一个rails项目就此就结束了。下面我要讲述一下在它运行成功之前遇到的问题。
继续要啰嗦几句,所有问题都是针对一个问题展开的,在解决这个问题的过程中,加深了对rails的mvc的各种约定的里面。下面将一一道来。
当完成简单rails代码编写后,运行了server。输入url后,得到如下图所示的异常:
终端异常信息:ActionController::RoutingError (No route matches "/say/hello")
大概的意思就是url中出现的/say/hello没有与之匹配的控制器。Google了一下,找到了解决方法:
1、 找到routes.rb文件,所在位置如下图:
2、 打开routes.rb后找到# match ':controller(/:action(/:id(.:format)))',将注释打开。(我是在最后一行找到的)。
3、 输入对应的url即可正常访问。
4、 还没结束,然后我就想到了其他问题,我将控制器的文件名称改成say1_controller.rb,然后再次输入url,结果如下图:
又找不到了,哈哈。接着我换了一个url如下:http://localhost:3000/say1/hello,结果如下:
不知道大家看出来问题没有:因为我将文件名改成say1_hello.rb,而没有将SayController类名修改,修改后,结果如下:
也访问OK!
好啦,可能好多地方没说清楚吧,哈哈。大家谅解。
总结http://localhost:3000/say/hello,的解析过程如下:
1、 其中say对应say_controller.rb,注意_controller我的理解为rails默认controller命名方式。将_之前的部分解析成控制器。
2、 say_controller.rb中定义的类名必须为SayController。
3、 hello对应say_controller.rb文件中SayContoller定义的hello方法。
本人小白,难免理解有问题。如理解有问题,请大家指出,以免误导大家。