前面把要展示的数据都放在了 controller 里,肯定不是长久之计。那来欢迎今天的重量级嘉宾吧,数据库 mysql 。

建立数据库

这次相关的配置文件是 config/database.yml 里面写明了要使用哪个数据库,对应我当前的情况是 Mysql 。 Rails 会默认给每个项目创立一个数据库,你说这不是三个吗?不是的,这个是三种不同的运行环境。默认处于开发环境下,所以数据库的名字就是 meetup_development。还记的前面安装 mysql 的时候吗?没有用密码对吧,所以这里也就不用填写密码了。

先登录到 mysql 里面看一眼

mysql -uroot
show databases;

目前还没有这个数据库,我可以在这里敲 SQL 语句来创建它。但是注意,有了 rails 之后,操作数据库是有一套更简便的方式的。

执行

rake db:create

在登上来看一下,meetup_development 已经建立好了。

每次都用命令行进数据库,不是特别美观。来安装一个小巧的数据库操作软件,叫 Sequel Pro 。

http://www.sequelpro.com/download 下载之后,放到桌面上,双击就可以打开了。

登录需要填写 Vagrantfile 中指定的 IP,mysql 的用户名 root 密码咱们没设置所以为空。要使用 ssh 链接,用户名和密码都是 vagrant 。 Port 不用填了。

建立数据表结构

更改数据库的表结构,rails 给出的方法是 Migration http://guides.rubyonrails.org/

 rails g migration CreateIssues

生成的文件名的前面是时间戳,20141105… 今天就是 2014年11月5号。里面可以添加需要的字段。

class CreateIssues < ActiveRecord::Migration
  def change
    create_table :issues do |t|
      t.string :title
      t.timestamps
    end
  end
end

运行

rake db:migrate

来把修改内容真正写进 mysql 数据库。会生成 db/schema.rb 文件。

建立 model

model 文件要放在 app/models 下面,名字叫 issue.rb

class Issue < ActiveRecord::Base
end

这里的 class 命名是很关键的,如果数据库中的表名是 issues 那这里的 class 名就必须是 Issue,也就是首字母大写,同时变成单数。为啥要这样? 因为这样 Rails 就可以建立自动的 class 到 table 的映射关系了,以后要操作 issues 这张表,就无比的方便。

这样就可以打开 rails console 来真正对这样表进行操作了,具体可以参考 http://guides.rubyonrails.org/active_record_basics.html

插入需要的记录

Issue.create(title: "Ruby Lover")
Issue.create(title: "Rails and Laravel")
Issue.all

现在在 controller 中使用数据

- @issues  = [ { title: "Ruby lovers", comments: "4" }, { title: "Rails and Laravel", comments: "5" } ]
+ @issues = Issue.all

到 _issue_list.html.erb 中在稍作修改就好了。