render 'new' # 重定位到new
redirect_to @user # 跳到show页面
session[:user_id] = @user.id # session保存功能,在整个rails的生命周期都存在
session.delete(:user_id) # session删除
rails 路由(rails 通过路由配置表来转发url动作)
路由表的功能:
- 接收识别http 请求
- 处理url参数
- 转发url动作
一般路由:
# 自动生成posts所有路由信息且相应除去show这个url的所有url
resources :posts, :except => :show
# 将接收到的指定格式的get请求路由(post跟id号)转发给show这个动作处理
# id是相应参数(将id这个参数保存到param中)
get 'posts/:id', :to => 'posts#show'
# 将接收到的指定格式的post请求路由(post跟id号)转发给show这个动作处理
post 'posts/:id', :to => 'posts#show'
<%= link_to '一般路由到跳转到id为1的文章',{:controller => 'posts',:action => 'show',:id => 1} %>
命名路由(比一般路由简便):不需要书写详细的信息(controlelr,action 之类的)
# 会自动生成一个名为show_posts的辅助方法
get 'posts/:id', :to => 'posts#show', :as => 'show_posts'
<%= link_to '命名路由到跳转到id为1的文章',show_post_path(1) %>
资源路由(常用路由)
# 资源路由自动生成7种访问(index, show, new, edit, create, update, destory)
# 擦~~resources 别忘最后的s
resources :posts
添加集合路由扩展
一个:
# 1. posts_controller 中添加
def recent
end
# 2. 创建 recent.html.reb 文件
<p> 自己添加一个recent 路由 </p>
# 3. routes.rb 对资源路由进行扩展
resources :posts do
get 'recent', :on => :collection
end
# 以上操作之后就添加了一个命名路由且自动生成了资源路由
多个:collection do end 包裹
# 区别是生成的url格式不同
resources :posts do
collection do
# posts/recent (http://localhost:3000/posts/recent)
get 'recent'
end
member do
# posts/:id/recent (http://localhost:3000/posts/1/recent)
get 'recent'
end
end
rails 数据交互
# 模型字段合法性
class User < ActiveRecord :: Base
# validates 函数指定 在往数据库插入数据的时候要求
# userName 不允许为空且最大长度不超过20
validates :userName, presence: true, length: {maximun: 20}
# 正则验证邮箱
EMAIL = /\A[a-zA-Z0-9\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z]+\z/
validates :email, presence: true, length: { maximum: 20 }, format: { with: EMAIL }, uniqueness: {case_sensitive:false}
end