一、创建第一个 Rails 应用
Rails 框架提供了 rails 命令工具集,可以通过创建运行 Rails 应用。
Rails 默认使用 Sqlite3 数据库,使用 MySQL 创建数据库需要添加 -d 参数。在命令行执行如下命令创建一个以 MySQL 数据库为基础的 Rails 应用
rails new myfirstapp -d=mysql
Rails 创建应用过程中会自动创建各种文件夹以及下载相应的依赖,所以创建时会花费几分钟的时间。
应用创建完成之后使用 RubyMine IDE 打开 myfirstapp 项目。
Rails 遵循习惯大于配置的原则,当 Rails 程序启动时会寻找项目根路径下的 config 目录下的 database.yml 文件,根据该文件中提供的数据库连接信息来连接数据库。
因此在项目创建完成后的第一件事就是修改相应的数据库连接,避免 Rails 应用时报错。
二、启动 Rails 应用
使用 RubyMine 启动 Rails 应用需要在 EditConfiguration 添加一个 Rails 的配置,直接点击 Apply 即可。
点击 myfirstapp 即可成功启动 Rails 应用
Rails 应用默认启动在 3000 端口,可以通过浏览器查看项目主页 http://localhost:3000
除此之外还可以使用命令启动项目,在项目目录下执行命令
rails server
三、代码生成器
自动生成 controller
Rails 内置了代码生成器,可以通过 rails generate 生成代码。
我们使用代码生成器来生成一个 Controller 和一个 Action,来看看 Rail 应用中文件的命名规则
rails generate controller MyZulu say_hi
执行上述命令会为 MyZulu 控制器创建相应的文件,为每一个方法创建相关的视图。
根据运行结果看确定该命令在 app/view 中创建了 my_zulu 文件夹,同时创建了控制器文件 my_zulu_controller.rb、控制器测试文件 my_zulu_controller_test.rb、视图文件 say_hi.html.erb 以及辅助文件 my_zulu_helper.rb。
接着我们在浏览器中访问 http://localhost:3000/my_zulu/say_hi 会得到如下页面。
这个页面是自动生成的页面,该页面的位置在 app/view/my_zulu
修改页面内容为:
<p>Hi, Ruby on Rails</p>
保存内容后,刷新浏览器页面,可以看到页面显示的内容也随之改变。
请求的流程如下:
Rails 中的控制器和模型的类名以及视图名都有一定的命名规则,只要符合这个规则,Rails 就可以自动将它们关联到一起。
自动生成 CRUD 代码
rails generate 不仅可以生成 controller 层代码,还可以通过添加 scaffold 参数生成 MVC 三层结构的代码。
执行如下命令,创建 Article 的 MVC 三层代码,实现 Article 的 CRUD。
rails generate scaffold Article title:string context:text
上述命令会创建 article 表的迁移代码,接着执行数据库迁移命令就可以在数据库中创建 articles 表。
rake db:migrate
接着我们可以通过查看 route 路由信息,来确定是否生成了 Article 类的 CRUD 路由。
rails routes
根据输出结果可以确定,应用中已经生成了 Article 的增删改查路由,我们可以在浏览器中访问 http://localhost:3000/articles
点击 New Article 添加一个新的 Article,输入 title 和 context 信息后点击 Create Article;
自动跳转到 Article 详情页面,路由为 /articles/1,路径中的 1 就是 Article 的 id;
再回到 Article 列表页面 /articles,就可以看到我们刚刚添加的一条记录
点击 Edit 按钮会跳转到编辑页面,此时的路由为 /article/1/edit,输入修改后的信息并点击 Update Article
之后会自动跳转到 Article 详情页面,并自动更新为修改后的信息。
可以再添加几个 Article 记录,在 Article 列表页面展示
选中一条记录,点击 Destroy 即删除这条记录
此时页面会有弹框提示
点击确认,再次回到 Article 列表页面,删除的记录不在列表中展示。
scaffold 生成的 ArticleController 类中包含了增删改查以及列表展示的方法并且映射到指定的路由以及视图页面。
可以看到 scaffold 生成的代码非常简单,在实际开发中通常会先通过 scaffold 生成基本的 CRUD 方法,然后在此基础上再进行开发,可以极大地提高开发效率。