加载开发环境
$ source ~/.rvm/scripts/rvm
新建工程
$ rails new hello_app
安装 gem
$ bundle install
打开服务
$ rails server
查看路由
$ rake routes
资源路由最常用,路由表中写入如下内容,生成该模型全部路由信息
resources :post #post为 model 名
脚手架帮助生成包括模型(数据库表)、控制器、路由等在内的所有初始代码,这里 scffold 是脚手架的意思,注意后面的模型 Post 是单数,其主键 id 自动生成,content 字段设置为 text 类型
$ rails generate scaffold Post content:text
删除命令
$ rails destroy scaffold Post
数据库迁移命令,模型建立后要执行,数据库才有用
$ bundle exec rake db:migrate
一般路由实例,路由表中写入如下代码,表示请求一个路由,转到一个动作
get 'posts/:id', :to => 'posts#show'
html 前端代码中超链接,使用了 link_to 的方法
<%= link_to 'id为1的微博',{:controller => 'posts',:action => 'show',:id => 1}>
命名路由,把上面的路由修改为如下,前端代码中可以直接使用命名路由
get 'posts/:id', :to => 'posts#show',:as => 'show_post'
在前端代码中可以修改为如下代码,可以生成相同效果超链接,1 是参数
<%= link_to 'id为1的微博',show_post_path(1)>
资源路由拓展,在控制器中要添加相应的方法,这里是 recent 方法,在 posts 的视图下面也要添加 recent.html.erb 文件,执行那个方法时,会自动转到这个页面
resources :posts do
collection do #集合路由
get 'recent'
end
member do #成员路由
get 'recent'
end
end
单独创建模型
$ rails generate model user userName:string email:string
在生成的 model 文件 user.rb 中添加存在性、长度、格式、唯一性(不区分大小写)验证
EMAIL = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ #邮箱正则表达式
validates :email,presence:true,length:{maximum:255},format:{with:EMAIL},uniqueness:{case_sensitive:false}
rails 控制台,可以用其操作数据库
$ rails console
修改模型,这里以添加字段为例,先输入如下命令
$ rails generate migration change_user_add_password
再在生成的脚本文件 db/migrate/20180127021214_change_user_add_password.rb 中的函数中添加,字段就添加成功了
add_column :users,:password_digest,:string
再在模型文件中添加一个安全验证函数(注意这里把 Gemfile 中的 gem ‘bcrypt’ 注释去掉)和其他验证
has_secure_password #安全验证函数
validates :password,length:{minmum:6}
页面重定向
redirect_to @user #重定向到 user 用户的资料页(show方法)
使用 session 保持用户状态,实现退出用户登录登出等会话功能,这里为 session 创建了一个 new 方法及视图
$ rails generate controller Sessions new
关联两个模型,在两个模型中写下如下代码
belongs_to :user #一个 post 属于一个 user
has_many :posts #一个 user 有许多 posts
注意上面之前在 posts 模型中添加了一个字段 user_id 作为自动关联用的字段
html.reb 表示嵌入式 ruby 语言,其中 <%= %> (要在页面上显示出来)或<% %> (不显示出来,主要是判断语句)写 ruby 语言,rails 会自动解析其中的 ruby 代码
rails 会默认将控制器动作中出现的所有变量给前端显示
常用前端内置方法 link_to (超链接)与 form_for (表单)
link_to "链接显示文字" options = {},html_options = {} #如何不写请求提交的方法,默认用 get 方法
rails 前端采用局部视图,底层视图在 layouts 文件夹中
只要你有一个控制器,就会有一个 helpers 文件对应,在 application_controller.rb 中包含一下该文件,helpers 文件中的方法就可以在所有控制器文件中使用,使用这种方式可以实现用户强制登录