MVC浏览器提交到控制器,控制器根据模型,模型到数据库里找到相应的处理给控制器,控制器跟View沟通,决定返回什么页面给浏览器。在提交控制器之前,有个路由问题,手脚架scaffold,快速自动生成blogrubygems 包管理工具gem命令安装Railsgem instal rails -v 4.2.0.beta4建立一个简单web应用$rails _4.2.0.beta4_ new hello_app #new命令会自动生成所有文件结构,同时自动执行bundle install命令编译执行Gemfile 是gem安装配置文件,使用bundle install 来安装运行rails 服务$rails server 或者rails server -b $IP -p $PORT主要配置文件:config/routes.rbapp/controllers/*_controller.rbgit版本控制$ git config --global user.name "Your Name"$ git config --global user.email [email protected]$ git config --global push.default matching$ git config --global alias.co checkout第一次使用前设置:git initgit add -Agit statusgit loggit commit -am 'init repos'git checkout -f #强制撤销上一次的改动分支git checkout -b static-pagesgit branch #查询分支合并git checkout master #先进入主分支git merge static-pages #合并git branch -d static-pages #删除分支git branch -D static-pages #即使分支的改动未合并到主干,也强制删除分支推送网上代码仓库bitbucket,注册账号,建立仓库,复制公钥到页面,cat ~/.ssh/id_rsa.pub$ git remote add origin [email protected]:/toy_app.git$ git push -u origin --all # 首次推送这个仓库git push部署 heroku,在公网环境使用pg ,所有要改Gemfilebundle install --without production #不在本地使用gem$heroku versionheroku loginheroku keys:addheroku create #会分配一个二级域名,立即生效heroku rename hello-dontforgetName #改一个不容易忘记的二级域名,访问hello-dontforgetName.heroku.comprint ('a'..'z').to_a.shuffle[0..7].join #随机生成不重复的域名heroku logsgit push heroku master # 推送代码到生产环节部署网上免费代码仓库:github 和 bitbucket 都有免费仓库和私有仓库,但github私有仓库收费,所有用bitbucket吧,如果为了安全性建立用户资源,用户添加、查询、更新和删除的数据模型,通过手脚架scaffold$rails generate scaffold User name:string email:string$bundle exec rake db:migrate #根据用户数据模型产生数据库表Note: rake 是ruby的make命令$bundle exec rake -T db #查看数据库的相关任务$bundle exec rake -T关系型数据库的CURD,create,update,read,delete 和 http请求方式POST、GET、PATCH(更新)、DELETE建立微博资源,$rails generate scaffold Micropost context:text user_id:integer$bundle exec rake db:migraterails 控制台$rails console限制微博长度:app/models/micropost.rbclass Micropostvalidates :content, length: { maximum: 140 }endrails路由添加资源:config/routes.rbRails.application.routes.draw doresources :micropostsresources :users.end一个用户拥有多篇微博app/models/user.rbclass Userhas_many :micropostsend一篇微博属于一个用户app/models/micropost.rbclass Micropostbelongs_to :uservalidates :content, length: { maximum: 140 }end更新迁移本地数据库到heroku生产环境数据库$heroku run rake db:migrate微博内容存在性验证app/models/micropost.rbclass Micropostbelongs_to :uservalidates :content, length: { maximum: 140 },presence: trueend在用户模型加入存在验证app/models/user.rbclass Userhas_many :micropostsvalidates FILL_IN, presence: truevalidates FILL_IN, presence: trueend$bundle update #更新gem的版本,确保安装的和Gemfile指定的一致生成控制器代码$rails generate controller StaticPages home help撤销命令$rails destroy controller StaticPages home help$bundle exec rake db:migrate #建立数据库模型$bundle exec rake db:rollback #撤销数据库操作$bundle exec rake db:migrate VERSION=0静态页面config/routes.rbRails.application.routes.draw doget 'static_pages/home'get 'static_pages/help'endTDD技术,测试驱动开发Test-Driven Development,开发应用前先写测试,写测试失败的用例,然后写应用,让测试通过test/controllers/static_pages_controller_test.rbrequire 'test_helper'class StaticPagesControllerTesttest "should get home" doget :homeassert_response :success #访问/home 是否能成功返回assert_select "title", "Home | Ruby on Rails Tutorial Sample App" #页面标题是否是这个end$ bundle exec rake test2 tests, 2 assertions, 0 failures, 0 errors, 0 skipstest/controllers/static_pages_controller_test.rb #测试控制器app/views/static_pages/about.html.erb #view视图页面模板app/views/layouts/application.html.erb #静态页面布局,全局有效动态代码: | Ruby on Rails Tutorial Sample App #引进应用的样式表 #引入javascript文件asset pipeline #避免跨站请求cross-site request forgery CSRFapp/views/layouts/application.html.erb #布局文件里的这个代码是表示把/static_pages/home里的home.html.erb转化成html 09-04 13:52