Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520608
  • 博文数量: 102
  • 博客积分: 950
  • 博客等级: 准尉
  • 技术积分: 1094
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-28 16:07
文章分类

全部博文(102)

文章存档

2020年(2)

2016年(5)

2015年(15)

2014年(25)

2013年(18)

2012年(19)

2011年(18)

我的朋友

分类: LINUX

2015-04-30 17:22:42

MVC

浏览器提交到控制器,控制器根据模型,模型到数据库里找到相应的处理给控制器,控制器跟View沟通,决定返回什么页面给浏览器。

在提交控制器之前,有个路由问题,


手脚架scaffold,快速自动生成blog


rubygems 包管理工具gem命令

安装Rails

gem 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.rb

app/controllers/*_controller.rb


git版本控制

$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
$ git config --global push.default matching
$ git config --global alias.co checkout

第一次使用前设置:

git init

git add -A

git status

git log

git commit -am 'init repos'

git checkout -f #强制撤销上一次的改动

分支

git checkout -b static-pages

git 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 git@bitbucket.org:/toy_app.git
$ git push -u origin --all # 首次推送这个仓库

git push


部署 heroku,在公网环境

使用pg ,所有要改Gemfile

bundle install --without production #不在本地使用gem

$heroku version

heroku login

heroku keys:add

heroku create #会分配一个二级域名,立即生效

heroku rename hello-dontforgetName #改一个不容易忘记的二级域名,访问hello-dontforgetName.heroku.com

print ('a'..'z').to_a.shuffle[0..7].join #随机生成不重复的域名

heroku logs

git 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:migrate


rails 控制台

$rails console

限制微博长度:

app/models/micropost.rb
class Micropost < ActiveRecord::Base
validates :content, length: { maximum: 140 }
end

rails路由添加资源:

config/routes.rb
Rails.application.routes.draw do
resources :microposts
resources :users
.
end

一个用户拥有多篇微博

app/models/user.rb

class User < ActiveRecord::Base
has_many :microposts
end

一篇微博属于一个用户

app/models/micropost.rb
class Micropost < ActiveRecord::Base
belongs_to :user
validates :content, length: { maximum: 140 }
end

更新迁移本地数据库到heroku生产环境数据库

$heroku run rake db:migrate


微博内容存在性验证

app/models/micropost.rb

class Micropost < ActiveRecord::Base
belongs_to :user
validates :content, length: { maximum: 140 },presence: true
end

在用户模型加入存在验证

app/models/user.rb
class User < ActiveRecord::Base
has_many :microposts
validates FILL_IN, presence: true
validates FILL_IN, presence: true
end


$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.rb
Rails.application.routes.draw do
get 'static_pages/home'
get 'static_pages/help'

end


TDD技术,测试驱动开发Test-Driven Development,开发应用前先写测试,写测试失败的用例,然后写应用,让测试通过

test/controllers/static_pages_controller_test.rb
require 'test_helper'
class StaticPagesControllerTest < ActionController::TestCase
test "should get home" do
get :home
assert_response :success #访问/home 是否能成功返回

assert_select "title", "Home | Ruby on Rails Tutorial Sample App" #页面标题是否是这个
end

$ bundle exec rake test
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips


test/controllers/static_pages_controller_test.rb #测试控制器

app/views/static_pages/about.html.erb    #view视图页面模板

app/views/layouts/application.html.erb     #静态页面布局,全局有效

动态代码:

<% provide(:title, "Home") %>

<%= yield(:title) %> | Ruby on Rails Tutorial Sample App


<%= stylesheet_link_tag ... %> #引进应用的样式表
<%= javascript_include_tag "application", ... %> #引入javascript文件asset pipeline
<%= csrf_meta_tags %> #避免跨站请求cross-site request forgery CSRF

app/views/layouts/application.html.erb

<%= yield %>  #布局文件里的这个代码是表示把/static_pages/home里的home.html.erb转化成html



阅读(1237) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~