Agile Web Development with Rails 3nd Edition学习笔记-创建Depot工程

开始学习ROR了,由于在开始跟着书做这个Depot工程时才决定把整个过程整理出来写成博客的,所以书开始部分讲的环境安装部分都没有整理。等以后再补充上来吧。
由于是刚刚开始学这个,所以在实验和总结的时候还是有一些疑问。在下面的内容中也都记录了下来。以便以后能够把曾遇到的问题逐个解决。当然,如果看了我总结的内容的朋友有知道答案的,还望指点小弟一二。另外,如果我描述的东西有哪里不正确的。还望朋友们指出。谢谢! :)

1. 创建Depot工程
创建一个使用MySQL作为后台数据库的Rails工程
[quote]rails --database=mysql depot[/quote]
工程创建好之后,数据库的配置信息在生成的depot/config/database.yml文件中。
内容如下:
[quote]development:
adapter: mysql
encoding: utf8
database: depot_development
username: root
password:
host: localhost[/quote]
如果需要,可以修改生成的数据库名称,以及用户名。
如果用户名不填,则使用使用者的登录用户访问数据库。

2. 创建开发数据库
[quote]mysqladmin -u root -p create depot_development[/quote]
该命令将创建一个没有任何表格的空数据库。数据库名为depot_development。

3. 测试数据库设置:
[quote]rake db:create RAILS_ENV='development'[/quote]
在实验的时候,执行这条命令之后出现了如下错误信息:
[quote]Couldn't create database for {"encoding"=>"utf8","username"=>"root",
"adapter"=>"mysql","database"=>"depot_development", "pool"=>5,
"password"=>nil,"socket"=>"/var/run/mysqld/mysqld.sock"},
charset: utf8,collation: utf8_general_ci (if you set the charset
manually,make sure you have a matching collation)[/quote]
在网上查了一下,原来是没有权限访问数据库。因为默认生成的数据库配置信息中的password字段没有设置。简单的设置该字段之后问题解决。
[color=orange]问题:
是不是可以不在这里填写数据库访问的密码呢?感觉很不安全的说。不知道后面是不是有关于这个问题的说明。等看到了再在这里增加解决方法吧。
还有个问题,就是是不是如果没有进行第二步的操作创建空数据库的话,这条命令是否能够自动的创建数据库呢?没有尝试。问题先留在这里。等跟着书上的介绍把这个Depot做完了之后再实验吧。[/color]
[quote]rake db:migrate[/quote]
这条命令其实会访问数据库,并在数据库中生成一个名为schema_migrations的表。这个表用来维护每次执行该命令时,使用depot/db/migrate/YYYYMMDDXXXXXX_create_products.rb文件名中YYYMMDDXXXXXX部分作为‘Version’来管理表的变更信息。
[color=orange]问题:
上面Version中的XXXXXX部分,从格式来看,应该是该rb文件生成的时分秒信息。但是看了实验时生成的值和生成该文件的时间之后,发现根本匹配不上。所以不知道是什么了。也就没有写成HHmmss来描述。)[/color]
[color=pink]回答:
经过后面实验时的观察,XXXXXX部分的值为格林威治时间。也就是0时区的时间。所以migrate文件的文件名规则为<YYYYMMDDHHmmss>-<operation>.rb。[/color]
4. 创建Products模块,并生成表
[quote]ruby depot/script/generate scaffold product \
title:string description:text image_url:string[/quote]
该命令将会生成如下信息:
[quote] exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/products
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/products/index.html.erb
create app/views/products/show.html.erb
create app/views/products/new.html.erb
create app/views/products/edit.html.erb
create app/views/layouts/products.html.erb
create public/stylesheets/scaffold.css
create app/controllers/products_controller.rb
create test/functional/products_controller_test.rb
create app/helpers/products_helper.rb
route map.resources :products
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/product.rb
create test/unit/product_test.rb
create test/fixtures/products.yml
create db/migrate
create db/migrate/20080601000001_create_products.rb[/quote]
这里就可以看到那个用来创建数据库表的rb文件了。
其实表中的字段是由这条命令中第二行的内容指定的。具体字段和类型为:
[quote]title:string # 字段:title 类型:string
description:text # 字段:description 类型:text
image_url:string # 字段:image_url 类型:string[/quote]
[color=orange]问题:
通过ruby script/generate scaffold -h查看该命令的格式是:
script/generate scaffold ModelName [field:type, field:type]
这里只能指定字段的名称和类型,那么怎么指定字段是必填字段还是非必填字段呢?[/color]

生成products表:
[quote]rake db:migrate[/quote]
这条命令将会使用刚生成的db/migrate/20080601000001_create_products.rb文件来创建表和其中的字段。并将“20080601000001”作为Version字段的值填写到schema_migrations表中。

从生成的表可以看到,该命令除了按照我们指定的字段名和类型生成了相应的字段外,还生成了如下
4个字段:
[quote]id:integer
created_at:datetime
updated_at:datetime
:[/quote]
其中,id字段是必填并且自动增加的字段。而最后那个既没有名字也没有类型的字段是必填字段。其它我们指定的字段都不是必填字段。

[color=orange]问题:
1. 最后那个字段是什么?做什么用的?
2. 我们指定的字段怎么设置成必填字段呢?[/color]

5. 运行
到现在,我们还没有写一行代码,但是这个工程已经可以带着数据库运行了。
运行下面的命令启动Web服务:
[quote]ruby script/server[/quote]
在浏览器地址栏中输入
[quote]http://localhost:3000/products[/quote]
我们就可以看到Product部分的运行情况了。默认生成代码为我们提供了一个和论坛很类似的界面。虽然界面还是非常非常的简单和原始,但是基本的功能却都具有了。我们可以添加新的“帖子”,查看“帖子“列表,并可以查看、修改或者删除一个“帖子“。
从这点来看,ROR在开发论坛上真的是非常的简单和便利了。不过这才刚刚开始。不知道之后是否会同样的简单。而那些更高级的功能以及数据的管理是否都能够很容易的实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值