Rails操作数据库(mysql)

一. 首先需要创建一个项目,并且要说明数据使用过的是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的欄位,欄位型別是stringRails會記錄你已經對資料庫操作過哪些Migrations,像此例中就只會跑這個Migration而已,就算你多執行幾次bundle exec rake db:migrate也只會對資料庫操作一次。



五、添加Validation验证

这里的验证指的是进行非空判断和一些简单数据校验

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的数据校验的职责放在这里,但是需要解决出错后的跳转问题(弹窗提示)。


六、把玩console

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 }

你可能感兴趣的:(RubyOnRails,环境搭建)