接触ruby on rails 已经有一段时间了,想记录一下自己的rails历程。自己写一些小例子来帮助学习。
Rails 适用于那些以数据为中心的应用,很多应用的核心部分包括一个数据库,这些引用的存在的主要原因是为了让客户可以通过它们来操作数据库,而不是直接使用SQL。
Rails应用的组成部分:
(1)ActionPack的应用框架。用来负责帮助生成数据驱动的交互页面来访问和修改数据库。
(2)Web服务器。可以是rails内置的web服务器也可以用apache等。
(3)数据库。可以是rails自带的sqLite或者是mysql等。
(4)对象-关系映射库。Rails提供了名为ActiveRecord的对象-关系映射库。
(5)Rails的工具脚本工具。例如支架(scaffolding),迁移(migration)。
(—)用Rails创建Web应用:
(1)在命令行中输入:
1 steven@ubuntu:~/RubymineProjects$ rails new OAONLINE
输出如下信息:
1 create 2 create README.rdoc 3 create Rakefile 4 create config.ru 5 create .gitignore 6 create Gemfile 7 create app 8 create app/assets/javascripts/application.js 9 create app/assets/stylesheets/application.css 10 create app/controllers/application_controller.rb 11 create app/helpers/application_helper.rb 12 create app/views/layouts/application.html.erb 13 create app/assets/images/.keep 14 create app/mailers/.keep 15 create app/models/.keep 16 create app/controllers/concerns/.keep 17 create app/models/concerns/.keep 18 create bin 19 create bin/bundle 20 create bin/rails 21 create bin/rake 22 create config 41 ..............
此时OAONLINE应用就创建成功。
启动Web应用:
进入OAONLINE程序所在目录,查看rails为我们生成的目录文件。
1 steven@ubuntu:~/RubymineProjects$ cd OAONLINE/ 2 steven@ubuntu:~/RubymineProjects/OAONLINE$ ls -l 3 total 60 4 drwxrwxr-x 8 steven steven 4096 Oct 31 21:43 app 5 drwxr-xr-x 2 steven steven 4096 Oct 31 21:43 bin 6 drwxrwxr-x 5 steven steven 4096 Oct 31 21:43 config 7 -rw-rw-r-- 1 steven steven 154 Oct 31 21:43 config.ru 8 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 db 9 -rw-rw-r-- 1 steven steven 1176 Oct 31 21:43 Gemfile 10 -rw-rw-r-- 1 steven steven 2715 Oct 31 21:44 Gemfile.lock 11 drwxrwxr-x 4 steven steven 4096 Oct 31 21:43 lib 12 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 log 13 drwxrwxr-x 2 steven steven 4096 Oct 31 21:43 public 14 -rw-rw-r-- 1 steven steven 253 Oct 31 21:43 Rakefile 15 -rw-rw-r-- 1 steven steven 478 Oct 31 21:43 README.rdoc 16 drwxrwxr-x 8 steven steven 4096 Oct 31 21:43 test 17 drwxrwxr-x 3 steven steven 4096 Oct 31 21:43 tmp 18 drwxrwxr-x 3 steven steven 4096 Oct 31 21:43 vendor
生成文件的含义,以后在说明。接下来启动应用程序。
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rails server 2 => Booting WEBrick 3 => Rails 4.0.0 application starting in development on http://0.0.0.0:3000 4 => Run `rails server -h` for more startup options 5 => Ctrl-C to shutdown server 6 [2013-10-31 21:52:49] INFO WEBrick 1.3.1 7 [2013-10-31 21:52:49] INFO ruby 2.0.0 (2013-06-27) [i686-linux] 8 [2013-10-31 21:52:49] INFO WEBrick::HTTPServer#start: pid=5263 port=3000
应用正常启动,然后在页面浏览一下,看看程序运行的结果:在浏览器中输入地址: http://0.0.0.0:3000
这样第一步完成的很顺利。
(二)接下来定制我们自己的需求
(1)利用支架生成界面和一些背后的代码例如路由的设置,控制器的编写等详细工作(在后面的章节详解)
OAONLINE是每个公司可以公用的一个OA系统。满足每个公司的基本办公需求。我们需要创建的页面允许我们创建,读取,更新,和删除每个公司的信息。Rails提供一种方式就可以快速生成需要的所有代码和页面。scaffolding(支架)。下面先看一下公司有哪些属性。
下面让我们见证神奇的时刻。在命令行中输入如下信息:
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rails generate scaffold company name:string phone:string address:string email:string fax:string description:text level:decimal
然后产生如下输出:
1 invoke active_record 2 create db/migrate/20131101054917_create_companies.rb 3 create app/models/company.rb 4 invoke test_unit 5 create test/models/company_test.rb 6 create test/fixtures/companies.yml 7 invoke resource_route 8 route resources :companies 9 invoke scaffold_controller 10 create app/controllers/companies_controller.rb 11 invoke erb 12 create app/views/companies 13 create app/views/companies/index.html.erb 14 create app/views/companies/edit.html.erb 15 create app/views/companies/show.html.erb 16 create app/views/companies/new.html.erb 17 create app/views/companies/_form.html.erb 18 invoke test_unit 19 create test/controllers/companies_controller_test.rb 20 invoke helper 21 create app/helpers/companies_helper.rb 22 invoke test_unit 23 create test/helpers/companies_helper_test.rb 24 invoke jbuilder 25 create app/views/companies/index.json.jbuilder 26 create app/views/companies/show.json.jbuilder 27 invoke assets 28 invoke coffee 29 create app/assets/javascripts/companies.js.coffee 30 invoke scss 31 create app/assets/stylesheets/companies.css.scss 32 invoke scss 33 create app/assets/stylesheets/scaffolds.css.scss
(2)对应的数据库
到目前为止,我们还没有讨论关于数据库的问题,我们查看一下rails在创建项目的时候为我们生成的目录中有个文件夹叫做db,进去看一下
1 steven@ubuntu:~/RubymineProjects/OAONLINE/db$ ll 2 total 16 3 drwxrwxr-x 3 steven steven 4096 Oct 31 22:49 ./ 4 drwxrwxr-x 12 steven steven 4096 Oct 31 21:44 ../ 5 -rw-r--r-- 1 steven steven 0 Oct 31 21:54 development.sqlite3 6 drwxrwxr-x 2 steven steven 4096 Oct 31 22:49 migrate/ 7 -rw-rw-r-- 1 steven steven 343 Oct 31 21:43 seeds.rb
这是Rails给默认设置的数据库,我们可以修改,在此将数据库改为mysql。修改方式如下:
rails给我们生成的文件中有个config文件夹,里面有database.yml文件,打开文件,发现里面有如下一段内容:
1 development: 2 adapter: sqlite3 3 database: db/development.sqlite3 4 pool: 5 5 timeout: 5000 6 7 # Warning: The database defined as "test" will be erased and 8 # re-generated from your development database when you run "rake". 9 # Do not set this db to the same as development or production. 10 test: 11 adapter: sqlite3 12 database: db/test.sqlite3 13 pool: 5 14 timeout: 5000 15 16 production: 17 adapter: sqlite3 18 database: db/production.sqlite3 19 pool: 5 20 timeout: 5000
将development中的内容修改如下:
development: adapter: mysql2 database: oaonline host: 192.168.0.101 username: root password: root encoding: utf8 reconnect: false pool: 5 timeout: 5000
通过迁移来创建数据表:rake db:migrate
竟然出现如下问题:
1 (in /home/steven/RubymineProjects/OAONLINE) 2 rake aborted! 3 Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile. 4 /home/steven/RubymineProjects/OAONLINE/config/environment.rb:5:in `' 5 Tasks: TOP => db:migrate => environment 6 (See full trace by running task with --trace)
将'mysql2'添加到Gemfile中,Genfile在程序的根目录中。添加如下代码:
1 gem 'mysql2'
再次执行命令:rake db:migrate
1 steven@ubuntu:~/RubymineProjects/OAONLINE$ rake db:migrate 2 == CreateCompanies: migrating ================================================ 3 -- create_table(:companies) 4 -> 0.0327s 5 == CreateCompanies: migrated (0.0330s) =======================================
此时数据表创建完成。
下面看一下咱们的工作成果:在浏览器中输入如下地址:http://0.0.0.0:3000/companies
如下为我们生成的几个页面:
OK。大概就是这个样子,实在希望大家帮我指点一下。多多交流。