一. 首先需要创建一个项目,并且要说明数据使用过的是mysql:
$ rails new myapp -d mysql # 将会在当前目录创建Rails程序骨架 $ cd myapp # 进入目录 $ rails server # 启动服务器
这时打开浏览器,输入IP后的3000端口,可能会出现下面这两个错误:
a.Access denied for user 'root'@'localhost' (using password: NO) ==>这是因为密码没有添加的原因,需要打开项目下的config/database.yml进行密码的配置 b.未找到对应的数据库。
==>也是需要对database.yml文件进行修改,将database一栏填上
这样处理过后就能看到rails的主页面了。
注:第二个问题不改也可以,可以用rake db:create进行数据库的创建,数据库名就是database里面定义的
二.使用模板scaffold(译作“脚手架”)进行项目的快速搭建
$ rails generate scaffold user first_name:string last_name:string active:boolean
执行上面一段话后,对象这一层会创建users这个对象,也就是Hibernate中对象的概念,系统会自动创建controller,views,models和数据库脚本,但是并没有创建数据库表。
相当于现在是在ORM中建立好了O(Object)这一项,但是R这一侧并没有构建
三.创建数据库表
rake db:migrate
migrate是“迁移”的意思,它会执行上一步生成的数据库脚本。
这个步骤是从对象向数据库导入表。
现在就可以浏览器访问:IP:3000/users进行操作了
注:以上都是简单数据库建立和从对象到数据库表的转换。但是在实际开发中,表之间是有关系的,表间关系如何处理需要了解;从数据库实体到对象的导入也需要了解。
1、哎呀!这时忽然想起忘记给user添加bio字段了。这时我们可以回退刚才的操作并添加一列
$ rake db:rollback
回退上一次migrate
2、打开/db/migrate/ 目录,这里只有一个文件[date]_create_users_rb。代码中定义了up方法来建表,down方法来删表。修改代码,在t.boolean :active后添加t.text :bio
3、保存文件并执行
$ rake db:migrate
4、如果访问http://localhost:3000/users/new你会发现表单中仍没有bio字段,这个字段要我们手动添加
5、打开/app/views/users/_form.html.erb
添加
<%= f.label :bio %>
<%= f.text_area :bio %>
6、在view页面中添加bio字段。打开/app/views/users/show.html.erb
/app/views/users/index.html.erb,依照其它字段添加bio信息
7、上面操作做完后你将在增删改查页面都发现多了bio字段。
以下是另一种添加字段的方式:
Migration檔案不需要和Model一一對應,像我們來新增一個Migration檔案來新增一個資料庫欄位,請執行:
$ rails g migration add_status_to_events
如此就會產生一個空的 migration 檔案在 db/migrate 目錄下。Migration 有提供 API 讓我們可以變更資料庫結構。例如,我們可以新增一個欄位。輸入rails g migration add_status_to_events
然後編輯這個Migration檔案:
# db/migrate/20110519123819_add_status_to_events.rbclass AddStatusToEvents < ActiveRecord::Migration def change add_column :events, :status, :string endend
接著執行bundle exec rake db:migrate
就會在events表格中新增一個status的欄位,欄位型別是string。Rails會記錄你已經對資料庫操作過哪些Migrations,像此例中就只會跑這個Migration而已,就算你多執行幾次bundle exec rake db:migrate
也只會對資料庫操作一次。
这里的验证指的是进行非空判断和一些简单数据校验
1、Rails把validations放在model文件里,所以我们找到/app/models/user.rb
2、我们需要用户必须输入first name和last name。修改后的代码如下:
class User < ActiveRecord::Base validates_presence_of :first_name, :last_name end
3、添加一个用户,试着不输入first name或last name,提交表单后会报错。
在之后的开发中可以把SSH中Action的数据校验的职责放在这里,但是需要解决出错后的跳转问题(弹窗提示)。
1、让我们来对User Model做一些有意思的事情。运行:
$ rails console
将会为我们提供一个有访问models权限的Ruby IRB session
2、玩之前,先在console里执行下面代码,以便让我们查看生成的SQL代码
ActiveRecord::Base.logger = Logger.new(STDOUT)
3、运行一个Ruby代码测试正常运行
puts "Hello Dude!"
4、现在就可以开始操作我们的model了,可以这样来创建一个用户
u = User.new
u.first_name = "Gregg"
u.last_name = "Pollack"
u.save
注意留意生成的SQL
5、也可以这样,合并成为一行代码
User.create(:first_name => "Joe", :last_name => "Blow")
6、查找first name 为”joe”的用户,并修改他的last name为”johnson”
u = User.find_by_first_name("Joe")
u.last_name = "Johnson"
u.save
7、删除用户
u.destroy
8、玩一下几个常用命令
User.first
User.last
User.all
User.all会返回一个数组,使用[0]或[2]来操作其中的一个元素
9、以首字母大写打印出系统中所有用户first name
User.all.each {|user| puts user.first_name.upcase }
10、将会发现打印出所有的first name,同时返回Users数组。记住所有Ruby方法都会有返回值,即使返回的是nil空的。
11、用所有用户的last name创建一个数组
User.all.map {|user| user.last_name }